40WA 求调
查看原帖
40WA 求调
1086881
Lin_morning楼主2024/10/15 13:34

40 分,除 AC 的点外都是 WA。求大佬调代码,有注释帮助理解。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5;
struct medal{
	int g,s,b,i;
}a[N],b[N],c[N];	// g,s,b
int f[N];	// 每个人最好的排名
bool cmpa(medal b,medal c){	// 金牌比较
	return b.g > c.g;
}
bool cmpb(medal b,medal c){	// 银牌比较
	return b.s > c.s;
}
bool cmpc(medal b,medal c){ // 铜牌比较
	return b.b > c.b;
}
int main(int argc, char **argv){
//	freopen("medal.in","r",stdin);
//	freopen("medal.out","w",stdout);
	int n;
	cin >> n;
	for (int i = 1;i <= n;i++){
		cin >> a[i].g >> a[i].s >> a[i].b;
		a[i].i = i;
		b[i] = a[i];
		c[i] = a[i];
	}
	sort(a + 1,a + n + 1,cmpa);
	sort(b + 1,b + n + 1,cmpb);
	sort(c + 1,c + n + 1,cmpc);
	for (int i = 1;i <= n;i++){
		int x = a[i].i,y = b[i].i,z = c[i].i;
		// 金牌[i]还没存最高排名就保存当前排名,下同
		if (!f[x]){
			if (a[i].g == a[i - 1].g)	f[x] = f[a[i - 1].i];
			else	f[x] = i;
		}
		if (!f[y]){
			if (b[i].s == b[i - 1].s)	f[y] = f[b[i - 1].i];
			else	f[y] = i;
		}
		if (!f[z]){
			if (c[i].b == c[i - 1].b)	f[z] = f[c[i - 1].i];
			else	f[z] = i;
		}
	}
	for (int i = 1;i <= n;i++){
		printf("%d\n",f[i]);
	}
	return 0;
}
2024/10/15 13:34
加载中...