社区讨论

RE,求调

P7426[THUPC 2017] 体育成绩统计参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjdx5ws0
此快照首次捕获于
2025/12/20 14:30
3 个月前
此快照最后确认于
2025/12/22 13:00
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
const int M = 1e5 + 5;
const int r1[10] = {750,780,810,840,870,910,950,990,1030,1080};
const int r2[10] = {400,417,434,451,470,485,500,515,530,540};
int n,m;
struct input{
	string a,d;
	char b,e;
	int c,f,g,id,ans,cnt,run;
}x[N];
struct haha{
	string a,b,c,d,f;
	double e;
	int g;
}y[M];
bool cmp1(input s,input t){
	for(int i = 0;i < 10;i++){
		if(s.a[i] != t.a[i]){
			return s.a[i] < t.a[i];
		}
	}
}
bool cmp2(haha s,haha t){
	for(int i = 0;i < 10;i++){
		if(s.b[i] != t.b[i]){
			return s.b[i] < t.b[i];
		}
	}
}
int run(string s,int k){
	int x = 0,y = 0,z = 0,ans = 0;
	if(s.size() == 5){
		x = s[0] - '0';
		y = (s[3] - '0') * 10 + s[4] - '0';
	}
	else{
		x = (s[0] - '0') * 10 + s[1] - '0';
		y = (s[3] - '0') * 10 + s[4] - '0';
	}
	z = x * 60 + y;
	if(k == 1){
		if(z < 750) ans = 20;
		for(int i = 0;i < 10;i++){
			if(z > r1[i]){
				ans = 20 - (i + 1) * 2;
			}
		}
	}
	else{
		if(z < 400) ans = 20;
		for(int i = 0;i < 10;i++){
			if(z > r2[i]){
				ans = 20 - (i + 1) * 2;
			}
		}
	}
	return ans;
}
bool Run(string a,string b,double c,string d,int e,int k){
	int x1 = (a[0] - '0') * 10 + a[1] - '0';
	int x2 = (b[0] - '0') * 10 + b[1] - '0';
	int y1 = (a[2] - '0') * 10 + a[3] - '0';
	int y2 = (b[2] - '0') * 10 + b[3] - '0';
	int z1 = (a[4] - '0') * 10 + a[5] - '0';
	int z2 = (b[4] - '0') * 10 + b[5] - '0';
	int t1 = x1 * 3600 + y1 * 60 + z1;
	int t2 = x2 * 3600 + y2 * 60 + z2;
	int t = t2 - t1;
	int u = (d[0] - '0') * 10 + d[2] - '0';
	if(k == 1){
		if(c < 3.00 || (c * 1000 / t) < 2 || (c * 1000 / t) > 5 || u > 270 || c * 1000 / e > 1.5){
			return 0;
		}
	}
	else{
		if(c < 1.50 || (c * 1000 / t) < 2 || (c * 1000 / t) > 5 || u > 270 || c * 1000 / e > 1.5){
			return 0;
		}
	}
	return 1;
} 
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin >> n;
	for(int i = 1;i <= n;i++){
		cin >> x[i].a >> x[i].b >> x[i].c >> x[i].d >> x[i].e >> x[i].f >> x[i].g;
		x[i].id = i;
		x[i].ans += x[i].c;
		if(x[i].e == 'P'){
			x[i].ans += 10;
		}
		if(x[i].b == 'M'){
			x[i].ans += run(x[i].d,1);
		}
		else x[i].ans += run(x[i].d,2);
	}
	sort(x + 1,x + n + 1,cmp1);
	cin >> m;
	for(int i = 1;i <= m;i++){
		cin >> y[i].a >> y[i].b >> y[i].c >> y[i].d >> y[i].e >> y[i].f >> y[i].g;
	}
	sort(y + 1,y + m + 1,cmp2);
	int t = 1;
    for(int i = 1;i <= m;i++){
        while(t <= n && x[t].a < y[i].b) t++;
        if(t > n) break;
        if(x[t].a == y[i].b){
        	if(x[t].b == 'M'){
        		if(Run(y[i].c,y[i].d,y[i].e,y[i].f,y[i].g,1)){
        			x[t].run++;
				}
			}
			else{
				if(Run(y[i].c,y[i].d,y[i].e,y[i].f,y[i].g,2)){
        			x[t].run++;
				}
			}
        }
    }
    for(int i = 1;i <= n;i++){
    	if(x[i].run >= 21) x[i].ans += 10;
		else if(x[i].run >= 19) x[i].ans += 9;
		else if(x[i].run >= 17) x[i].ans += 8;
		else if(x[i].run >= 14) x[i].ans += 7;
		else if(x[i].run >= 11) x[i].ans += 6;
		else if(x[i].run >= 7) x[i].ans += 4;
		else if(x[i].run >= 3) x[i].ans += 2;
	}
    for(int i = 1;i <= n;i++){
        int s = x[i].g + x[i].run,sum = 0;
        if(s >= 18) sum = 5;
        else if(s >= 15) sum = 4;
        else if(s >= 12) sum = 3;
        else if(s >= 9) sum = 2;
        else if(s >= 6) sum = 1;
        x[i].ans += sum + x[i].f;
    }
    for(int i = 1;i <= n;i++){
        if(x[i].ans >= 95){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "A" << '\n';
		}
        else if(x[i].ans >= 90){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "A-" << '\n';
        }
        else if(x[i].ans >= 85){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "B+" << '\n';
		}
        else if(x[i].ans >= 80){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "B" << '\n';
        }
        else if(x[i].ans >= 77){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "B-" << '\n';
        }
        else if(x[i].ans >= 73){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "C+" << '\n';
        }
        else if(x[i].ans >= 70){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "C" << '\n';
		}
        else if(x[i].ans >= 67){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "C-" << '\n';
        }
        else if(x[i].ans >= 63){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "D+" << '\n';
        }
        else if(x[i].ans >= 60){
        	cout << x[i].a << ' ' << x[i].ans << ' ' << "D" << '\n';
		}
        else cout << x[i].a << ' ' << x[i].ans << ' ' << "F" << '\n';
    }
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...