https://www.luogu.com.cn/problem/UVA1316
这题的AC代码是这样的:
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,bool>vis;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-')f = -1;
ch = getchar();
}
while (isdigit(ch)) {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
struct node{
int d;
int p;
}a[10005];
bool cmp(node x,node y){
return x.p>y.p;
}
signed main(){
int n;
while(cin>>n){
int ans=0;
vis.clear();
for(int i=1;i<=n;i++){
a[i].p=read();
a[i].d=read();
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
if(!vis[a[i].d]){
vis[a[i].d]=1;
ans+=a[i].p;
}
else{
for(int j=a[i].d;j>=1;j--){
if(!vis[j]){
vis[j]=1;
ans+=a[i].p;
break;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}
我稍微改了一下,但是只有 41 分,有没有大佬能帮忙改下。
#include<bits/stdc++.h>
using namespace std;
unordered_map<int,bool>vis;
inline int read() {
int x = 0, f = 1;
char ch = getchar();
while (!isdigit(ch)) {
if (ch == '-')f = -1;
ch = getchar();
}
while (isdigit(ch)) {
x = x * 10 + ch - '0';
ch = getchar();
}
return x * f;
}
struct node{
int d;
int p;
}a[100005];
bool cmp(node x,node y){
return x.p>y.p;
}
signed main(){
int n;
cin>>n;
int ans=0;
for(int i=1;i<=n;i++){
a[i].d=read();
a[i].p=read();
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
if(!vis[a[i].d]){
vis[a[i].d]=1;
ans+=a[i].p;
}
else{
for(int j=a[i].d;j>=1;j--){
if(!vis[j]){
vis[j]=1;
ans+=a[i].p;
break;
}
}
}
}
printf("%d",ans);
return 0;
}