P8342 [COCI2021-2022#6] Med 題解
阿新 • • 發佈:2022-05-20
題意:
給你 \(n\) 個人,還有他的五場成績,第六場成績不知道,但成績在 \([0,500]\) 中,問每個人的最優和最劣排名。
思路:
簡單模擬題。
對於每個人,他的最大排名就是自己拿 \(500\),別人都是 \(0\) 分。
他的最小排名是自己拿 \(0\) 分,別人都是 \(500\) 分。
模擬即可。
AC code:
/* Work by: TLE_Automation */ #include<cmath> #include<queue> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define LL long long #define int long long using namespace std; const int N = 1e6 + 10; const int MAXN = 2e5 + 10; inline char readchar() { static char buf[100000], *p1 = buf, *p2 = buf; return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++; } inline int read() { #define readchar getchar int res = 0, f = 0; char ch = readchar(); for (; !isdigit(ch); ch = readchar()) if (ch == '-') f = 1; for (; isdigit(ch); ch = readchar()) res = (res << 1) + (res << 3) + (ch ^ '0'); return f ? -res : res; } inline void print(int x) { if (x < 0 ) putchar('-'), x = -x; if (x > 9 ) print(x / 10); putchar(x % 10 + '0'); } struct _Node { string s; int sum; bool operator < (const _Node &x) const { return sum != x.sum ? sum > x.sum : s < x.s; } } a[MAXN], b[MAXN]; int wz; #define re register signed main() { // ios::sync_with_stdio(0);cin.tie(0), cout.tie(0); int n = read(); for (register int i = 1; i <= n; i++) { cin >> a[i].s; for (re int j = 1; j <= 5; j++) a[i].sum += read(); } for (re int i = 1; i <= n; i++) b[i].s = a[i].s, b[i].sum = a[i].sum; for (re int i = 1; i <= n; i++) { string S = a[i].s; for (re int j = 1; j <= n; j++) b[j].s = a[j].s, b[j].sum = a[j].sum; for (re int j = 1; j <= n; j++) { if (b[j].s == S) { b[j].sum += 500; break; } } sort(b + 1, b + n + 1); for (re int j = 1; j <= n; j++) { if (b[j].s == S) { printf("%lld ", j); wz = j; break; } } b[wz].sum -= 500; for(re int j = 1; j <= n; j++) { if(b[j].s != S) b[j].sum += 500; } sort(b + 1, b + n + 1); for (re int j = 1; j <= n; j++) { if (b[j].s == S) { printf("%lld\n", j); } } } return 0; }