坑 #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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/63275.html
標籤:C++
