感觉这两题一样啊
查看原帖
感觉这两题一样啊
564475
lianchanghua楼主2023/10/17 21:16

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;
}
2023/10/17 21:16
加载中...