大模拟(?)求调,悬赏 2 关注
查看原帖
大模拟(?)求调,悬赏 2 关注
672281
InversionShadow楼主2023/10/11 16:01

rt.

咕了三四个月了(),样例过了,但是 wa。

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int MAXN = 1e6 + 100;

const int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

struct Node{
	char c, q; // 性别    体质测试是否通过
	string s, b; // 学号   期末长跑测试成绩
	int x, y, f, k; // 体育课专项成绩     「大一专项计划」的期末检测成绩     参加「班级训练营」的次数
} a[MAXN];

int n, m, ps[MAXN], nowx, g; // 步数 
string ss[MAXN], p[MAXN], sk[MAXN], sz[MAXN], zt[MAXN]; // 表示第 j 条记录的完成日期   学号   开始时间   结束时间   暂停时间 
double l[MAXN];

map<string, int> mp, mp1; // 得分  阳光合法次数  
map<string, char> mp2;//性别 map 

int check(string s) {
	int x = ((s[0] - '0') * 10 + s[1] - '0') * 3600;
	int x1 = ((s[3] - '0') * 10 + s[4] - '0') * 60;
	int x2 = ((s[6] - '0') * 10 + s[7] - '0');
	return x + x1 + x2;
}

bool check1(string s) {
	return ((s[0] - '0') * 10 + s[2] - '0' <= 34);
}

int check2(int x) {
	if (x >= 3 && x <= 6) return 2;
	if (x >= 7 && x <= 10) return 4;
	if (x >= 11 && x <= 13) return 6;
	if (x >= 14 && x <= 16) return 7;
	if (x >= 17 && x <= 18) return 8;
	if (x >= 19 && x <= 20) return 9;
	if (x >= 21) return 10;
	return 0;
}

int check3(int x) {
	if (x >= 6 && x <= 8) return 1;
	if (x >= 9 && x <= 11) return 2;
	if (x >= 12 && x <= 14) return 3;
	if (x >= 15 && x <= 17) return 4;
	if (x >= 18) return 5;
	return 0;
}

bool cmp(Node i, Node j) {
	return mp[i.s] > mp[j.s];
}

string check4(int x) {
	if (x >= 0 && x < 60) return "F";
	if (x >= 60 && x < 63) return "D";
	if (x >= 63 && x < 67) return "D+";
	if (x >= 67 && x < 70) return "C-";
	if (x >= 70 && x < 73) return "C";
	if (x >= 73 && x < 77) return "C+";
	if (x >= 77 && x < 80) return "B-";
	if (x >= 80 && x < 85) return "B";
	if (x >= 85 && x < 90) return "B+";
	if (x >= 90 && x < 95) return "A-";
	if (x >= 95 && x <= 100) return "A";
}

int check7(int x, int y, int z, int w) {
	return x * 1000 + y * 100 + z * 10 + w;
}

int check5(string s) {
	int x = check7(s[0] - '0', s[1] - '0', s[3] - '0', s[4] - '0');
	if (x <= check7(1, 2, 3, 0)) return 20;
	if (x <= check7(1, 3, 0, 0)) return 18;
	if (x <= check7(1, 3, 3, 0)) return 16;
	if (x <= check7(1, 4, 0, 0)) return 14;
	if (x <= check7(1, 4, 3, 0)) return 12;
	if (x <= check7(1, 5, 1, 0)) return 10;
	if (x <= check7(1, 5, 5, 0)) return 8;
	if (x <= check7(1, 6, 3, 0)) return 6;
	if (x <= check7(1, 7, 0, 0)) return 4;
	if (x <= check7(1, 8, 0, 0)) return 2;
	return 0;
}

int check6(string s) {
	int x = check7(s[0] - '0', s[1] - '0', s[3] - '0', s[4] - '0');
	if (x <= check7(0, 6, 4, 0)) return 20;
	if (x <= check7(0, 6, 5, 7)) return 18;
	if (x <= check7(0, 7, 1, 4)) return 16;
	if (x <= check7(0, 7, 3, 1)) return 14;
	if (x <= check7(0, 7, 5, 0)) return 12;
	if (x <= check7(0, 8, 0, 5)) return 10;
	if (x <= check7(0, 8, 2, 0)) return 8;
	if (x <= check7(0, 8, 3, 5)) return 6;
	if (x <= check7(0, 8, 5, 0)) return 4;
	if (x <= check7(0, 9, 0, 0)) return 2;
	return 0;
}

signed main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].s >> a[i].c >> a[i].x >> a[i].b >> a[i].q >> a[i].f >> a[i].k;
		mp[a[i].s] += a[i].x + a[i].f;
		mp2[a[i].s] = a[i].c;
	}
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> ss[i] >> p[i] >> sk[i] >> sz[i] >> l[i] >> zt[i] >> ps[i];
		if (mp2[p[i]] == 'M' && ps[i] < 3000) {
			continue;
		}
		if (mp2[p[i]] == 'F' && ps[i] < 1500) {
			continue;
		} 
		double pjsd = 1000.0 * l[i] / (check(sz[i]) - check(sk[i]));
		if (pjsd >= 2 && pjsd <= 5) {
			if (check1(zt[i])) {
				double pjpf = 1000.0 * l[i] / ps[i];
				if (pjpf <= 1.5) {
					if ((ss[i][4] - '0') * 10 + ss[i][5] - '0' != (ss[g][4] - '0') * 10 + ss[g][5] - '0') {
						int yy = (ss[g][4] - '0') * 10 + ss[g][5] - '0';
						int xx = (ss[i][4] - '0') * 10 + ss[i][5] - '0';
						if (days[yy] != (ss[g][6] - '0') * 10 + ss[g][7] - '0') {
							continue;
						} 
						if (ss[i][6] == '0' && ss[i][7] == '1') {
							if (((sk[i][0] - '0') * 10 + sk[i][1]) - 1 >= ((sz[g][0] - '0') * 10 + sz[g][1])) {
								mp1[p[i]]++;
								g = i;
								continue;
							}
							if (((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) < 24) {
								mp1[p[i]]++;
								g = i;
								continue;
							}
							if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24) < ((sk[i][0] - '0') * 10 + sk[i][1] - '0')) {
								mp1[p[i]]++;
								g = i;
							} else if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24 == (sk[i][0] - '0') * 10 + sk[i][1] - '0') && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
								mp1[p[i]]++;
								g = i;
							}
						}
					}
					if (ss[i] == ss[g]) { // 和上一个合法在同一天 
						if ((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6 < (sk[i][0] - '0') * 10 + sk[i][1] - '0') {
							mp1[p[i]]++;
							g = i;
						} else if ((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6 == (sk[i][0] - '0') * 10 + sk[i][1] - '0' && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
							mp1[p[i]]++;
							g = i;
						} 
					} else {  // 例如: 11:20:30   4:00:00 
						if (((sk[i][0] - '0') * 10 + sk[i][1]) - 1 >= ((sz[g][0] - '0') * 10 + sz[g][1])) {
							mp1[p[i]]++;
							g = i;
							continue;
						}
						if (((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) < 24) {
							mp1[p[i]]++;
							g = i;
							continue;
						}
						if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24) < ((sk[i][0] - '0') * 10 + sk[i][1] - '0')) {
							mp1[p[i]]++;
							g = i;
						} else if ((((sz[g][0] - '0') * 10 + sz[g][1] - '0' + 6) % 24 == (sk[i][0] - '0') * 10 + sk[i][1] - '0') && sz[g][3] == sk[i][3] && sz[g][4] == sk[i][4] && sz[g][6] == sk[g][6] && sz[g][7] == sk[g][7]) {
							mp1[p[i]]++;
							g = i;
						}
					} 
				}
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		mp[a[i].s] += check2(mp1[a[i].s]);
	}
	for (int i = 1; i <= n; i++) {
		if (a[i].q == 'P') {
			mp[a[i].s] += 10; // 34 + 3 + 2 + 10 + 1 + 2 + 12 
		}
	}
	for (int i = 1; i <= n; i++) {
		mp[a[i].s] += check3(mp1[a[i].s] + a[i].k);
		if (mp2[a[i].s] == 'M') {
			mp[a[i].s] += check5(a[i].b);
		} else {
			mp[a[i].s] += check6(a[i].b);
		}
	}
	stable_sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i++) {
		cout << a[i].s << ' ' << mp[a[i].s] << ' ' << check4(mp[a[i].s]) << '\n';
	}
	return 0; 
}
2023/10/11 16:01
加载中...