华师一附中OI组
标题:
P1042 乒乓球
[打印本页]
作者:
admin
时间:
2018-4-19 14:15
标题:
P1042 乒乓球
https://www.luogu.org/problemnew/show/P1042
题目背景
国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役。华华就是其中一位,他退役之后走上了乒乓球研究工作,意图弄明白11分制和21分制对选手的不同影响。在开展他的研究之前,他首先需要对他多年比赛的统计数据进行一些分析,所以需要你的帮忙。
题目描述
华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。直到分差大于或者等于2,才一局结束。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。
输入输出格式
输入格式:
每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。
输出格式:
输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。
输入输出样例
输入样例#1:
WWWWWWWWWWWWWWWWWWWW
WWLWE
输出样例#1:
11:0
11:0
1:1
21:0
2:1
说明
每行至多25个字母,最多有2500行
作者:
GTR
时间:
2018-5-4 23:01
程序:
#include<iostream>
using namespace std;
char a[1000005];
int main()
{
int w=0,l=0,j,i=1;
while(a[i]!='E')
cin>>a[i];
for(i=1;;i++)
{
if(a[i]=='E')break;
if(a[i]=='W') w++;
if(a[i]=='L') l++;
if((w>=11&&w-l>1)||(l>=11&&l-w>1))
{
cout<<w<<":"<<l<<endl;
w=0;
l=0;
}
}
cout<<w<<":"<<l<<endl<<endl;
w=0;l=0;
for(i=1;;i++)
{
if(a[i]=='E')break;
if(a[i]=='W') w++;
if(a[i]=='L') l++;
if((w>=21&&w-l>1)||(l>=21&&l-w>1)){
cout<<w<<":"<<l<<endl;
w=0;
l=0;
}
}
cout<<w<<":"<<l;
return 0;
}
复制代码
作者:
admin
时间:
2018-5-18 20:03
此题数据的读入是一个很重要的考点,一般的cin或者getline都不是很好用,应该是挨个儿字符读入直到E为止,同时将读到的字符拼成一个字符串供下面两次使用。
#include<iostream>
#include<cmath>
using namespace std;
string s;
char ch;
int a,b,l,i;
int main()
{
cin>>ch;
///请记住这种读数据的方法 可以跳过回车等
while (ch!='E'){if (ch=='L'||ch=='W')s=s+ch;cin>>ch;}
///cout<<s; 输出检查
l=s.size();
a=b=0;
for (i=0;i<=l-1;i++)
{
if (s[i]=='W') a++;
else if (s[i]=='L') b++;
if (abs(b-a)>=2 && (b>=11||a>=11))
{ cout<<a<<':'<<b<<endl;
a=b=0;
}
}
cout<<a<<':'<<b<<endl;
cout<<endl;
a=b=0;
for (i=0;i<=l-1;i++)
{
if (s[i]=='W') a++;
else if (s[i]=='L') b++;
if (abs(b-a)>=2 && (b>=21||a>=21))
{ cout<<a<<':'<<b<<endl;
a=b=0;
}
}
cout<<a<<':'<<b<<endl;
return 0;
}
复制代码
作者:
倚窗倾听风吹雨
时间:
2018-7-3 17:14
#include<iostream>
using namespace std;
char s[62510];
int i=0,j=0,w=0,l=0;
int main()
{
do cin>>s[i];while(s[i++]!='E');
while(s[j]!='E')j++;
for(i=0;i<j;i++)
{
if(s[i]=='W')w++;
else l++;
if((w>=11 || l>=11)&&(w-l>=2 || l-w>=2))
{
cout<<w<<":"<<l<<endl;
w=0;l=0;
}
}
cout<<w<<":"<<l<<endl;
cout<<endl;w=0;l=0;
for(i=0;i<j;i++)
{
if(s[i]=='W')w++;
else l++;
if((w>=21 || l>=21)&&(w-l>=2 || l-w>=2))
{
cout<<w<<":"<<l<<endl;
w=0;l=0;
}
}
cout<<w<<":"<<l<<endl;
return 0;
}
复制代码
作者:
吴语林
时间:
2018-7-29 22:13
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
int main(){
int i,a,b,M21=0,M11=0,L21=0,L11=0,g1=0,g2=0,print1[10000][3],print2[10000][3];
char w;
w=getchar();
while(w!='E')
{
if(w=='W')
{
M21++;
M11++;
}
else if(w=='L')
{
L21++;
L11++;
}
if(M11>=11||L11>=11)
{
if(abs(M11-L11)>=2)
{
g1++;
print1[g1][1]=M11;
print1[g1][2]=L11;
M11=L11=0;
}
}
if(M21>=21||L21>=21)
{
if(abs(M21-L21)>=2)
{
g2++;
print2[g2][1]=M21;
print2[g2][2]=L21;
M21=L21=0;
}
}
w=getchar();
}
for(i=1;i<=g1;i++)
{
printf("%d:%d\n",print1[i][1],print1[i][2]);
}
printf("%d:%d\n\n",M11,L11);
for(i=1;i<=g2;i++)
{
printf("%d:%d\n",print2[i][1],print2[i][2]);
}
printf("%d:%d",M21,L21);
return 0;
}
复制代码
作者:
universehyf
时间:
2018-9-25 17:00
标准硬模拟题 每次循环就好了
#include<iostream>
using namespace std;
#define FOR(iii,nn,mm) for(int iii=nn;iii<=mm;iii++)
char t;
bool b[70000];
int c,w,l;
int main()
{
cin>>t;while(t!='E')
{
if(t=='W') b[c++]=1;
if(t=='L') b[c++]=0;
cin>>t;
}
FOR(i,0,c-1)
{
if(b[i]) w++;else l++;
if(w>=11&&w-l>=2) {cout<<w<<':'<<l<<endl;w=l=0;}
if(l>=11&&l-w>=2) {cout<<w<<':'<<l<<endl;w=l=0;}
}
cout<<w<<':'<<l<<endl;w=l=0;cout<<endl;
FOR(i,0,c-1)
{
if(b[i]) w++;else l++;
if(w>=21&&w-l>=2) {cout<<w<<':'<<l<<endl;w=l=0;}
if(l>=21&&l-w>=2) {cout<<w<<':'<<l<<endl;w=l=0;}
}
cout<<w<<':'<<l;
return 0;
}
复制代码
欢迎光临 华师一附中OI组 (http://hsyit.cn/)
Powered by Discuz! X3.2