系列文章目录
第一题 乒乓球
视频:http://【洛谷题单 - 算法 - 高精度】https://www.bilibili.com/video/BV1Ym4y1s7BD?vd_source=66a11ab493493f42b08b31246a932bbb
目录
系列文章目录
第一题 乒乓球
前言
一、题目以及引领思考
二、题解与代码
1.输入输出案例
2.代码及解析
总结
前言
本题运用到了高精度算法,具体体现在记录乒乓赛输赢时有无数场,我们把每一场都记录在数组中,而不是简单的一两场
提示:以下是本篇文章正文内容,下面案例可供参考
一、题目以及引领思考
①差值 | 正规乒乓球比赛,不仅分数要大于11(或21),两者分数相差也要大于2。如果比赛分数达到11-10,比赛会继续。直到一个人比另外一个人多两分。(如13-11) |
②思想 | 与埃筛法比较相似,只看其中一队,那另一队的胜利就代表我们所看重的那一对的失败,我们用1表示胜利的场,用2表示失败的场,存在数组里,然后用一个数进行统计数组中1,2的个数 |
③ 误区 | 这个题还有一个重点就是记录分数时除了与胜利场数有关外,还与胜利顺序有关 |
二、题解与代码
1.输入输出案例
输入:
WWWWWWWWWWWWWWWWWWWW
WWLWE
输出:
11:0
11:0
1:1
21:0
2:1
2.代码及解析
代码如下(示例):
#include <bits/stdc++.h>
using namespace std;
int a[1000000];
int x,y;//记录输赢场数
int main()
{
char s;
for(int i=1;cin>>s&&s!='E';i++)//读入每场的输赢 ,s起中间作用
{
if(s=='W')a[i]=1;//赢的场记为1
else a[i]=2; //输的场记为2
}
//11进制如下:
for(int i=1;1;i++)
{
if(a[i]==1)x++;
if(a[i]==2)y++;
if(a[i]==0)//此时所有场次已经统计完,输出最后一次的记录结果
{
cout<<x<<":"<<y<<endl<<endl;
break;
}
if(x-y>=2||y-x>=2)//是否存在2的差值
if(x>=11||y>=11){//是否为11制
cout<<x<<":"<<y<<endl;
x=0;//清零,下一回合
y=0;}
}
x=0;//清零,方便21制计算
y=0;
//21进制如下:
for(int i=1;1;i++)
{
if(a[i]==1)x++;
if(a[i]==2)y++;
if(a[i]==0)
{
cout<<x<<":"<<y<<endl;
break;
}
if(x-y>=2||y-x>=2)
if(x>=21||y>=21)
{ cout<<x<<":"<<y<<endl;
x=0;
y=0;
}
}
return 0;
}
总结
以上就是今天要讲的内容,本文介绍了洛谷中高精度算法的第一题,希望对您有所帮助~