#include\u0020 #include\u0020 #include\u0020<unordered_map> #include\u0020

using\u0020namespace\u0020std;

struct\u0020Submission\u0020{ \u0020\u0020string\u0020time; \u0020\u0020char\u0020problem; \u0020\u0020string\u0020team; \u0020\u0020string\u0020verdict; };

bool\u0020cmp(const\u0020Submission&\u0020s1,\u0020const\u0020Submission&\u0020s2)\u0020{ \u0020\u0020return\u0020s1.time\u0020<\u0020s2.time; }

bool\u0020isAccepted(const\u0020Submission&\u0020s)\u0020{ \u0020\u0020return\u0020s.verdict\u0020==\u0020"Accepted"; }

bool\u0020isPending(const\u0020Submission&\u0020s)\u0020{ \u0020\u0020return\u0020s.verdict\u0020==\u0020"Pending"; }

int\u0020main()\u0020{ \u0020\u0020int\u0020n,\u0020m,\u0020K; \u0020\u0020cin\u0020>>\u0020n\u0020>>\u0020m\u0020>>\u0020K;

\u0020\u0020unordered_map<string,\u0020int>\u0020teamRank; \u0020\u0020vector<vector>\u0020teamScore(m,\u0020vector(n)); \u0020\u0020vector<vector>\u0020teamPending(m,\u0020vector(n)); \u0020\u0020vector\u0020submissions(K);

\u0020\u0020for\u0020(int\u0020i\u0020=\u00200;\u0020i\u0020<\u0020K;\u0020++i)\u0020{ \u0020\u0020\u0020\u0020cin\u0020>>\u0020submissions[i].time\u0020>>\u0020submissions[i].problem\u0020>>\u0020submissions[i].team\u0020>>\u0020submissions[i].verdict; \u0020\u0020\u0020\u0020--submissions[i].problem;\u0020//\u0020convert\u0020problem\u0020char\u0020to\u0020index \u0020\u0020}

\u0020\u0020sort(submissions.begin(),\u0020submissions.end(),\u0020cmp);

\u0020\u0020for\u0020(int\u0020i\u0020=\u00200;\u0020i\u0020<\u0020K;\u0020++i)\u0020{ \u0020\u0020\u0020\u0020const\u0020Submission&\u0020s\u0020=\u0020submissions[i]; \u0020\u0020\u0020\u0020if\u0020(isAccepted(s))\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020if\u0020(!teamPending[teamRank[s.team]][s.problem])\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020teamScore[teamRank[s.team]][s.problem] +=\u00201; \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020teamPending[teamRank[s.team]][s.problem]\u0020=\u0020true; \u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020else\u0020if\u0020(isPending(s))\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020if\u0020(teamRank.find(s.team)\u0020==\u0020teamRank.end())\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020teamRank[s.team]\u0020=\u0020teamRank.size(); \u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020} \u0020\u0020}

\u0020\u0020vector\u0020teamOrder; \u0020\u0020for\u0020(const\u0020auto&\u0020p\u0020:\u0020teamRank)\u0020{ \u0020\u0020\u0020\u0020teamOrder.push_back(p.first); \u0020\u0020}

\u0020\u0020for\u0020(int\u0020i\u0020=\u00200;\u0020i\u0020<\u0020m;\u0020++i)\u0020{ \u0020\u0020\u0020\u0020for\u0020(int\u0020j\u0020=\u00200;\u0020j\u0020<\u0020n;\u0020++j)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020if\u0020(teamPending[i][j])\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020teamScore[i][j] +=\u002020\u0020*\u0020count(teamPending[i].begin(),\u0020teamPending[i].begin()\u0020+\u0020j,\u0020true); \u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020} \u0020\u0020}

\u0020\u0020vector\u0020rank(m,\u00201); \u0020\u0020for\u0020(int\u0020i\u0020=\u00200;\u0020i\u0020<\u0020m;\u0020++i)\u0020{ \u0020\u0020\u0020\u0020for\u0020(int\u0020j\u0020=\u00200;\u0020j\u0020<\u0020m;\u0020++j)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020if\u0020(i\u0020!=\u0020j)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020bool\u0020isHigher\u0020=\u0020true; \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020for\u0020(int\u0020k\u0020=\u00200;\u0020k\u0020<\u0020n;\u0020++k)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020if\u0020(teamScore[i][k]\u0020<\u0020teamScore[j][k])\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020isHigher\u0020=\u0020false; \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020break; \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020else\u0020if\u0020(teamScore[i][k]\u0020>\u0020teamScore[j][k])\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020break; \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020\u0020\u0020\u0020if\u0020(isHigher)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020\u0020\u0020++rank[i]; \u0020\u0020\u0020\u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020} \u0020\u0020}

\u0020\u0020for\u0020(const\u0020string&\u0020team\u0020:\u0020teamOrder)\u0020{ \u0020\u0020\u0020\u0020int\u0020idx\u0020=\u0020teamRank[team]; \u0020\u0020\u0020\u0020for\u0020(int\u0020i\u0020=\u00200;\u0020i\u0020<\u0020rank[idx]\u0020-\u00201;\u0020++i)\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020cout\u0020<<\u0020team\u0020<<\u0020endl; \u0020\u0020\u0020\u0020} \u0020\u0020\u0020\u0020if\u0020(teamPending[idx]\u0020!=\u0020vector(n,\u0020false))\u0020{ \u0020\u0020\u0020\u0020\u0020\u0020cout\u0020<<\u0020team\u0020<<\u0020endl; \u0020\u0020\u0020\u0020} \u0020\u0020}

\u0020\u0020return\u00200; }

C++ 解決 ICPC 滾榜問題 - 打 ACM 最快樂的就是滾榜讀隊名了 (Easy Version)

原文地址: https://www.cveoy.top/t/topic/p9SS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录