坑 #1:输入有若干行,但处理的时候要看成一个整体的信息。比如说第一行最后一局比分是 2:1
,这时不算比完,这个比分要继承到第二行的信息中继续处理。
坑 #2:一局结束,当且仅当其中一方比分大于等于11 分且双方比分分数之差大于等于 2 。注意这是乒乓球常识而不是 OI 常识,题面中最后一句话提到了这个问题,不过不够明显。
坑 #3:两种不同的分数制度输出之间要换行。
坑 #4:在 Windows 环境下,我们判断是否读完,直接写while(cin>>s)
,运行时先换行,再按 Ctrl+Z
,再换行就可以出结果了。
其他:注意代码细节。思路理清后大概十几分钟就能写完了。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
string s;
int a[2000009],b[2000009];
//a数组记录华华某一句某时刻是否有分,b数组记录华华对手
int main()
{
int n=0;
while(cin>>s)
{
for(int i=0;i<s.length();i++)
if(s[i]=='E')break;
else
if(s[i]=='W')a[++n]=1;
else b[++n]=1;
//这里n不用清零,直接将所有输入作为整体
}
int answ=0,ansl=0;
for(int i=1;i<=n;i++)
{
if(a[i])answ++;
if(b[i])ansl++;
if(answ>=11||ansl>=11)
{
if(abs(answ-ansl)>=2)
{
cout<<answ<<':'<<ansl<<endl;
answ=0,ansl=0; //一局结束后分数归零
}
}
}
cout<<answ<<':'<<ansl<<endl;
cout<<endl; //换行!!!
answ=0,ansl=0;
for(int i=1;i<=n;i++)
{
if(a[i])answ++;
if(b[i])ansl++;
if(answ>=21||ansl>=21)
{
if(abs(answ-ansl)>=2)
{
cout<<answ<<':'<<ansl<<endl;
answ=0,ansl=0;
}
}
}
cout<<answ<<':'<<ansl<<endl;
return 0;
}