注:
时间的存储方法:(天数)* 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;
}