这道题有好两个误区:
如果字符串一开头就输入E,那么就等于没有比赛。输出两个0:0。
再一个就是,如果字符串输出结果刚好满足11(21):0即字符串的长度刚好就是11(21),那么必须得开下一场
即再多输出一个0:0。(不要问为什么,问就是下载了测试集)
个人认为使用字符串方便些,因为他可以直接相加。
substr(a,b)很好用的字符串函数,直接截取字符串a-b的部分。
废话不多说了,代码走起:
#include <iostream>
#include <string>
#include <algorithm>
#include <stdio.h>
using namespace std;
bool dep(int a,int b)
{
if ((a - b)>1 || (b-a) >1)
return true;
else
return false;
}
bool eve(int a,int b,int num)
{
if (a > (num-1) || b > (num-1))
return true;
else
return false;
}
int col(string a)
{
int flag = 0;
for (int i =0;i<a.length();i++)
{
if (a[i] == 'E')
return flag;
else
flag++;
}
return flag;
}
void sup(string aimm,int n)
{
int lsum = 0;
int wsum = 0;
for (int i=0;(aimm[i] != '\0')&&(aimm[i] != 'E');i++)
{
if (aimm[i] == 'L')
lsum++;
else if(aimm[i] == 'W')
wsum++;
if ((eve(lsum,wsum,n) && dep(lsum,wsum)) == true)
{
cout << wsum << ":" << lsum << endl;
if ((wsum == n || lsum == n) && (aimm[i+1] == '\0'))
cout << 0 << ":" << 0 << endl;
lsum = wsum =0;
}
else if((aimm[i+1] == '\0') || (aimm[i+1] == 'E'))
{
cout << wsum << ":" << lsum << endl;
break;
}
}
}
int main()
{
string aimm;
string a;
for (int i=0;1;i++)
{
cin >> a;
if (a.length() - col(a) > 0)
{
aimm += a.substr(0,col(a));
break;
}
else
{
aimm += a.substr(0,col(a));
}
}
if (aimm.length() == 0)
{
cout << "0" << ":" << "0" << endl << endl;
cout << "0" << ":" << "0" << endl;
}
else
{
sup(aimm,11);
cout << endl;
sup(aimm,21);
}
return 0;
}