题解 CF409A 【The Great Game】

Uichiha_Itachi

2018-12-12 22:22:12

Solution

(小声BB)这题怎么才有红题难度QAQ不符合常理QAQ~~至多也就一个$\tiny\color{#f00}\text{入门-}$而已~~ 这题是说,给你一排字符,表示两队石头剪刀布的出招顺序。 $8\!<$是剪刀,$[\,]$是布,$\{\,\}$是剪刀。 我们发♂现,这仨动作都是两个字符媾♂成的,而且都不相同,所以我们只需要读第一个字符。 读一个字符代码: ```cpp void read_one_char(void) { char ch; ch = cin.get();//读一个字符 cin.get();//丢掉 } ``` 然后判胜负就是一顿S\*\*胡搞了,我这里用了一下预处理,就是用```map```把所有匹配预处理好(打表),然后用```pair```把同回合两个动作匹配起来,然后查(da)找(biao)得到结果,记录胜利次数,最后比较。 **注意,题目里没提到,题目是比较胜利次数,不是一回合比完有胜负就结束!** $code:$ ```cpp #include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <utility> #include <map> #define until(x) while(!(x)) using namespace std; map<pair<char,char>,int> mp; void init() { pair<char,char> chs[9] = {{'[','['},{'[','('},{'[','8'}, {'(','['},{'(','('},{'(','8'}, {'8','['},{'8','('},{'8','8'}}; mp[chs[0]] = mp[chs[4]] = mp[chs[8]] = -1;//TIE mp[chs[1]] = mp[chs[5]] = mp[chs[6]] = 1;//1 win mp[chs[2]] = mp[chs[3]] = mp[chs[7]] = 0;//2 win return; } //这题还真是毒瘤 int main() { init(); vector<char> action[2]; char ch; ch = cin.get(); for(;ch != '\n';) { action[0].push_back(ch);//当前动作 cin.get();//吃掉下一个字符 ch = cin.get();//更新 } ch = cin.get(); for(;ch != '\n';) { action[1].push_back(ch); cin.get(); ch = cin.get();//同上 } int win1 = 1,win2 = -1; for(int i = 0;i < action[1].size();i++) { pair<char,char> p = {action[0][i],action[1][i]}; if(mp[p] == 1) { win1++; } else if(mp[p] == 0) { win2++; } } if(win1 == win2)//赢得一样多 cout << "TIE" << endl; else if(win1 > win2)//一队赢的多 cout << "TEAM 1 WINS" << endl; else if(win1 < win2)//二队赢得多 cout << "TEAM 2 WINS" << endl; return 0; } //代码相比AC代码有修改,直接抄会爆0 ```