洛谷 P1042 乒乓球 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置。

题目链接:https://www.luogu.org/problem/show?pid=1042

题目背景

国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及。其中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

分析:虽然只是个简单的模拟,但是还是交了好几次...题目没有给出输出范围,像这样没范围的模拟题,数组能开多大开多大,不然铁定要RE.

AC代码:
 1 #include<iostream>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cstdio>
 6
 7 char s;
 8 int l = 0,r = 1;
 9
10 inline int abs(int a)
11 {return a>=0?a:-a;}
12
13 struct score
14 {
15     int a,b;
16     score(){
17         a = 0,b = 0;
18     }
19
20 }num[1000005];
21
22 int main()
23 {
24 //    freopen("1.txt","r",stdin);
25     while(scanf("%c",&s))
26     {
27         if(s == ‘E‘)
28             break;
29         if(s > ‘Z‘ || s < ‘A‘)
30             continue;
31         if(s == ‘W‘)
32             num[l].a ++,num[r].a ++;
33         else if(s == ‘L‘)
34             num[l].b ++,num[r].b ++;
35         if((num[l].a >= 11 || num[l].b >= 11) && abs(num[l].a-num[l].b) >= 2)
36             l += 2;
37         if((num[r].a >= 21 || num[r].b >= 21) && abs(num[r].a-num[r].b) >= 2)
38             r += 2;
39     }
40     for(register int i = 0;i <= l;i += 2)
41         printf("%d:%d\n",num[i].a,num[i].b);
42     printf("\n");
43     for(register int i = 1;i <= r;i += 2)
44         printf("%d:%d\n",num[i].a,num[i].b);
45     return 0;
46 }

时间: 2024-07-31 03:57:26

洛谷 P1042 乒乓球 题解的相关文章

洛谷 P1077 摆花 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1077 题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆.通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号.为了在门口展出更多种花,规定第i种花不能超过ai盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列. 试编程计算,一共有多少种不同的摆花方案. 输入输出格式 输入格式

洛谷 P1082 同余方程 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1082 题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围]

洛谷 P1540 机器翻译 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1540 题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件 会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译:如果内存中没有,软件就会在外存中的词典内查找,查出单词的中文含

洛谷 P1816 忠诚 题解

题目链接:https://www.luogu.org/problem/show?pid=1816 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了怀疑.于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3-编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题. 输入

Tower /点的移动(洛谷 1632)题解

[问题描述] 平面上有N个整数坐标点.如果将点(x0,y0)移动到(x1,y1),则需要的代价为|x0-x1|+|y0-y1|.求使得K(K=1,…,N)个点在同一位置上最少需要的代价. [样例输入] 4     15 14    15 16    14 15     16 15 [样例输出] 0    2    3    4 [解题思路] 初看这道题,还以为是只能移动到有点的地方,即把别的点移动到一个点上,移动(k-1)个点所需要的最小代价,结果发现样例都过不去……接着分析了一下样例,发现样例

[POI 2008&amp;洛谷P3467]PLA-Postering题解(单调栈)

Description Byteburg市东边的建筑都是以旧结构形式建造的:建筑互相紧挨着,之间没有空间.它们共同形成了一条长长的,从东向西延伸的建筑物链(建筑物的高度不一). Byteburg市的市长Byteasar,决定将这个建筑物链的一侧用海报覆盖住.并且想用最少的海报数量,海报是矩形的. 海报与海报之间不能重叠,但是可以相互挨着(即它们具有公共边),每一个海报都必须贴近墙并且建筑物链的整个一侧必须被覆盖(意思是:海报需要将一侧全部覆盖,并且不能超出建筑物链) 输入格式:第一行为一个整数n

【p2722】洛谷P2722总分题解

这个题是一个裸的完全背包问题,但是数组需要开大, 代码 #include<iostream> using namespace std; int n,m,v,i; int c[100010],w[100010],f[100010]; int main() { cin>>m>>n; for( i=1;i<=n;i++) cin>>c[i]>>w[i]; for( i=1;i<=n;i++) for( v=w[i];v<=m;v++)

洛谷 P1652圆 题解

题目传送门 这道题也就是考你对几何的了解: 圆与圆没有公共点且一个圆在另一个圆外面时,叫做圆与圆相离. 当圆心距大于两圆半径之和时,称为两圆外离: 当圆心距小于两圆半径之差的绝对值时,称为两圆内含. 知道了以后题目就好做了: #include<bits/stdc++.h> using namespace std; int n,xx0,xx1,yy0,yy1,ans; struct node{ int x,y,r; }a[55]; int JS(int x,int y,node a){ if((

洛谷 P2036 Perket 题解

题目传送门 这道题可以使用dfs深搜实现,在每次递归深搜时要更新ans. #include<bits/stdc++.h> using namespace std; int n,ans=2147483647,s=1,b; bool flag[15]; struct node{ int s,b; }a[15]; void dfs(int k){ if(k==n) ans=min(ans,abs(s-b)); for(int i=1;i<=n;i++){ if(flag[i]==0){ s*=