大膜你求调
查看原帖
大膜你求调
639563
封禁用户楼主2023/4/22 10:05

注:

时间的存储方法:(天数)* 86400 +(小时)* 3600 +(分钟)* 60 +(秒数)。

#include <bits/stdc++.h>
using namespace std;

////////////////////////////////////////////////////

#define nan xzcyyds998244353

int tianshu[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
map<pair<int, int>, int> shijianbiao;

void shijianbiao_chushihua() {
	int yue = 1, ri = 1, jishu = 0;
	while (yue != 13) {
		shijianbiao[make_pair(yue, ri)] = jishu;
		jishu++;
		
		ri++;
		if (ri >= tianshu[yue] + 1) {
			yue++;
			ri = 1;
		}
	}
}

int shijian(int shi, int fen, int miao) {
	return shi * 3600 + fen * 60 + miao;
}

int shijian2(int yue, int ri) {
	return shijianbiao[make_pair(yue, ri)] * shijian(24, 0, 0);
}

////////////////////////////////////////////////////

struct changpao {
	// nian = 2017
	int kaishi;
	int jieshu;
	int jvli;
	int zanting;
	int bushu;
};

bool operator <(changpao x, changpao y) {
	return x.kaishi < y.kaishi;
}

struct tongxue {
	bool xingbie; // F => 0, M => 1;
	int tiyuke;
	int ceshi;
	set<changpao> yangguang;
	int tizhi;
	int xunlianying;
	int dayiqimo;
	
	int changpaohefa;
	
	int zongdefen;
};

map<string, tongxue> banji;

////////////////////////////////////////////////////

map<int, int> nan;
map<int, int> nv;

void ceshi_chushihua() {
	nan[shijian(0, 12, 30)] = 20;	nv[shijian(0, 6, 40)] = 20;
	nan[shijian(0, 13, 0)] = 18;	nv[shijian(0, 6, 57)] = 18;
	nan[shijian(0, 13, 30)] = 16;	nv[shijian(0, 7, 14)] = 16;
	nan[shijian(0, 14, 0)] = 14;	nv[shijian(0, 7, 31)] = 14;
	nan[shijian(0, 14, 30)] = 12;	nv[shijian(0, 7, 50)] = 12;
	nan[shijian(0, 15, 10)] = 10;	nv[shijian(0, 8, 5)] = 10;
	nan[shijian(0, 15, 50)] = 8;	nv[shijian(0, 8, 20)] = 8;
	nan[shijian(0, 16, 30)] = 6;	nv[shijian(0, 8, 35)] = 6;
	nan[shijian(0, 17, 10)] = 4;	nv[shijian(0, 8, 50)] = 4;
	nan[shijian(0, 18, 0)] = 2;		nv[shijian(0, 9, 0)] = 2;
	nan[shijian(11, 45, 14)] = 0;	nv[shijian(19, 19, 81)] = 0;
}

int ceshi_defen(string xuehao) {
	bool xingbie = banji[xuehao].xingbie;
	if (xingbie) {
		for (auto xzcyyds : nan) {
			if (banji[xuehao].ceshi <= xzcyyds.first) {
				return xzcyyds.second;
			}
		}
	} else {
		for (auto xzcyyds : nv) {
			if (banji[xuehao].ceshi <= xzcyyds.first) {
				return xzcyyds.second;
			}
		}
	}
}

////////////////////////////////////////////////////

bool jilu_hefa(changpao jilu, string xuehao) {
	bool xingbie = banji[xuehao].xingbie;
	bool jvli_hefa = 1;
	bool sudu_hefa = 1;
	bool zanting_hefa = 1;
	bool bufu_hefa = 1;
	if (xingbie) {
		jvli_hefa = (jilu.jvli >= 3000);
	} else {
		jvli_hefa = (jilu.jvli >= 1500);
	}
	if (jilu.jvli / (jilu.jieshu - jilu.kaishi) < 2) {
		sudu_hefa = 0;
	} else if (jilu.jvli / (jilu.jieshu - jilu.kaishi) > 5) {
		sudu_hefa = 0;
	} else if ((jilu.jvli / (jilu.jieshu - jilu.kaishi) == 5) && (jilu.jvli % (jilu.jieshu - jilu.kaishi) != 0)) {
		sudu_hefa = 0;
	}
	if (jilu.zanting > shijian(0, 4, 30)) {
		zanting_hefa = 0;
	}
	if (1.0 * jilu.jvli / jilu.bushu > 1.5) {
		bufu_hefa = 0;
	}
//	cerr << jvli_hefa << " " << sudu_hefa << " " << zanting_hefa << " " << bufu_hefa << endl;
	return jvli_hefa && sudu_hefa && zanting_hefa && bufu_hefa;
}

void yangguang_jiancha(string xuehao) {
	int daan = 0;
	int jieshushijian = -1145141919;
	for (auto jilu : banji[xuehao].yangguang) {
		if (jilu_hefa(jilu, xuehao) && jilu.kaishi - jieshushijian >= shijian(6, 0, 0)) {
			daan++;
			jieshushijian = jilu.jieshu;
		}
	}
	banji[xuehao].changpaohefa = daan;
}

map<int, int> yangguang;

void yangguang_chushihua() {
	yangguang[233333] = 10;
	yangguang[20] = 9;
	yangguang[18] = 8;
	yangguang[16] = 7;
	yangguang[13] = 6;
	yangguang[10] = 4;
	yangguang[6] = 2;
	yangguang[2] = 0;
}

int yangguang_defen(string xuehao) {
	int changpaohefa = banji[xuehao].changpaohefa;
	for (auto xzcyyds : yangguang) {
		if (changpaohefa <= xzcyyds.first) {
			return xzcyyds.second;
		}
	}
}

////////////////////////////////////////////////////

// 体质得分不用算

////////////////////////////////////////////////////

map<int, int> dayichuqing;

void dayi_chushihua() {
	dayichuqing[66666666] = 5;
	dayichuqing[17] = 4;
	dayichuqing[14] = 3;
	dayichuqing[11] = 2;
	dayichuqing[8] = 1;
	dayichuqing[5] = 0;
}

int dayi_defen(string xuehao) {
	int chuqingcishu = banji[xuehao].xunlianying + banji[xuehao].changpaohefa;
	for (auto xzcyyds : dayichuqing) {
		if (chuqingcishu <= xzcyyds.first) {
			return xzcyyds.second + banji[xuehao].dayiqimo;
		}
	}
}

////////////////////////////////////////////////////

map<int, string> dengdi;

void dengdi_chushihua() {
	dengdi[101] = "A";
	dengdi[95] = "A-";
	dengdi[90] = "B+";
	dengdi[85] = "B";
	dengdi[80] = "B-";
	dengdi[77] = "C+";
	dengdi[73] = "C";
	dengdi[70] = "C-";
	dengdi[67] = "D+";
	dengdi[63] = "D";
	dengdi[60] = "F"; 
}

string dengdi_chaxun(string xuehao) {
	for (auto xzcyyds : dengdi) {
		if (banji[xuehao].zongdefen < xzcyyds.first) {
			return xzcyyds.second;
		}
	}
}

////////////////////////////////////////////////////
///////**************************************///////
////////////////////////////////////////////////////

int main() {
	shijianbiao_chushihua();
	ceshi_chushihua();
	yangguang_chushihua();
	dayi_chushihua();
	dengdi_chushihua();
	
	int n;
	scanf("%d", &n);
	
	for (int i = 0; i < n; i++) {
		string xuehao;
		cin >> xuehao;
		
		string xingbie;
		cin >> xingbie;
		banji[xuehao].xingbie = (xingbie == "M");
		
		int tiyuke;
		cin >> tiyuke;
		banji[xuehao].tiyuke = tiyuke;
		
		int fen, miao;
		scanf("%d'%d\"", &fen, &miao);
		banji[xuehao].ceshi = shijian(0, fen, miao);
		
		string tizhi;
		cin >> tizhi;
		if (tizhi == "P") {
			banji[xuehao].zongdefen += 10;
		}
		
		int dayiqimo;
		cin >> dayiqimo;
		banji[xuehao].dayiqimo = dayiqimo;
		
		int xunlianying;
		cin >> xunlianying;
		banji[xuehao].xunlianying = xunlianying;
	}
	
	int m;
	scanf("%d", &m);
	
	for (int i = 0; i < m; i++) {
		string nianyueri;
		cin >> nianyueri;
		int yue = (nianyueri[4] - '0') * 10 + (nianyueri[5] - '0');
		int ri = (nianyueri[6] - '0') * 10 + (nianyueri[7] - '0');
		
		string xuehao;
		cin >> xuehao;
		
		int shi1, fen1, miao1;
		int shi2, fen2, miao2;
		scanf("%d:%d:%d %d:%d:%d", &shi1, &fen1, &miao1, &shi2, &fen2, &miao2);
		
		changpao jilu;
		jilu.kaishi = shijian2(yue, ri) + shijian(shi1, fen1, miao1);
		jilu.jieshu = shijian2(yue, ri) + shijian(shi2, fen2, miao2);
		
		if (jilu.jieshu < jilu.kaishi) {
			jilu.jieshu += shijian(24, 0, 0);
		}
		
		double jvli_qianmi;
		cin >> jvli_qianmi;
		int jvli = (int)(jvli_qianmi * 1000);
		jilu.jvli = jvli;
		
		int zanting_fen, zanting_miao;
		scanf("%d'%d\"", &zanting_fen, &zanting_miao);
		jilu.zanting = shijian(0, zanting_fen, zanting_miao);
		
		int bushu;
		cin >> bushu;
		jilu.bushu = bushu;
		
		banji[xuehao].yangguang.insert(jilu);
	}
	
	for (auto & xuesheng : banji) {
		int tiyuke = xuesheng.second.tiyuke;
		int ceshi = ceshi_defen(xuesheng.first);
		yangguang_jiancha(xuesheng.first);
		int yangguang = yangguang_defen(xuesheng.first);
		int dayi = dayi_defen(xuesheng.first);
		
		xuesheng.second.zongdefen += tiyuke;
		xuesheng.second.zongdefen += ceshi;
		xuesheng.second.zongdefen += yangguang;
		xuesheng.second.zongdefen += dayi;
		
//		cerr << xuesheng.first << " " << tiyuke << " " << ceshi << " " << yangguang << " " << dayi << endl;
		cout << xuesheng.first << " " << xuesheng.second.zongdefen << " " << dengdi_chaxun(xuesheng.first) << endl;
	}
	return 0;
}
2023/4/22 10:05
加载中...