题解 CF409A 【The Great Game】
Uichiha_Itachi
2018-12-12 22:22:12
(小声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
```