最新消息:点击查看大S的省钱秘笈

Vijos P1217 乒乓球 C语言版

Vijos题解 Slyar 79浏览 0评论

文章作者:姜南(Slyar) 文章来源:Slyar Home (www.slyar.com) 转载请注明,谢谢合作。

描述 Description

华华通过以下方式进行分析,首先将比赛每个球的胜负列成一张表,然后分别计算在11分制和21分制下,双方的比赛结果(截至记录末尾)。
比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):
WWWWWWWWWWWWWWWWWWWWWWLW
在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。而在21分制下,此时比赛结果是华华第一局21比0获胜,正在进行第二局,比分2比1。如果一局比赛刚开始,则此时比分为0比0。
你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

输入格式 Input Format

每个输入文件包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成,也许中间有若干个空格。其中E表示比赛信息结束,程序应该忽略E之后的所有内容,E后面可能有干扰文字。

输出格式 Output Format

输出由两部分组成,每部分有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。其中第一部分是11分制下的结果,第二部分是21分制下的结果,两部分之间由一个空行分隔。

Tip:11分制是指,选手双方谁先取得11分,就获得一局比赛的胜利;而21分制指,选手双方谁先取得21分,可以嬴得一局比赛的胜利。当某人分数达到 11(11分制)或21(21分制下),但双方的得分差小于两分时(比如21分制下21:20),则比赛继续进行,直到双方差距等于两分为止。注意数据规模,数组要开到10万以上,另外注意特殊情况的输出。

#include <stdio.h>

int main(){
char x,s[1000000];
int i,n=1,w,l;
for(;;){
scanf("%c",&x);
if (x=='E') break;
if (x=='W'||x=='L'){
s[n]=x;
n++;
}
}
w=0;
l=0;
for (i=1;i<=n-1;i++){
if (s[i]=='W') w++;
if (s[i]=='L') l++;
if ((w>=11||l>=11)&&abs(w-l)>1){
printf("%d:%d\n",w,l);
w=0;
l=0;
}
}
printf("%d:%d\n\n",w,l);
w=0;
l=0;
for (i=1;i<=n-1;i++){
if (s[i]=='W') w++;
if (s[i]=='L') l++;
if ((w>=21||l>=21)&&abs(w-l)>1){
printf("%d:%d\n",w,l);
w=0;
l=0;
}
}
printf("%d:%d\n",w,l);
system("pause");
return 0;
}

转载请注明:Slyar Home » Vijos P1217 乒乓球 C语言版

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址