【做题笔记】P1042 乒乓球

2020-02-14 16:03:33来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

【做题笔记】P1042 乒乓球

坑 #1:输入有若干行,但处理的时候要看成一个整体的信息。比如说第一行最后一局比分是 2:1 ,这时不算比完,这个比分要继承到第二行的信息中继续处理。

坑 #2:一局结束,当且仅当其中一方比分大于等于11 分且双方比分分数之差大于等于 2 。注意这是乒乓球常识而不是 OI 常识,题面中最后一句话提到了这个问题,不过不够明显。

坑 #3:两种不同的分数制度输出之间要换行。

坑 #4:在 Windows 环境下,我们判断是否读完,直接写while(cin>>s),运行时先换行,再按 Ctrl+Z,再换行就可以出结果了。

其他:注意代码细节。思路理清后大概十几分钟就能写完了。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

string s;
int a[2000009],b[2000009];
//a数组记录华华某一句某时刻是否有分,b数组记录华华对手

int main()
{
    int n=0;
    while(cin>>s)
    {
        for(int i=0;i<s.length();i++)
            if(s[i]=='E')break;
            else 
                if(s[i]=='W')a[++n]=1;
                else b[++n]=1;
         //这里n不用清零,直接将所有输入作为整体
    }
    int answ=0,ansl=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i])answ++;
        if(b[i])ansl++;
        if(answ>=11||ansl>=11)
        {
            if(abs(answ-ansl)>=2)
            {
                cout<<answ<<':'<<ansl<<endl;
                answ=0,ansl=0; //一局结束后分数归零
            }
        }
    }
    cout<<answ<<':'<<ansl<<endl;
    cout<<endl; //换行!!!
    answ=0,ansl=0;
    for(int i=1;i<=n;i++)
    {
        if(a[i])answ++;
        if(b[i])ansl++;
        if(answ>=21||ansl>=21)
        {
            if(abs(answ-ansl)>=2)
            {
                cout<<answ<<':'<<ansl<<endl;
                answ=0,ansl=0;
            }
        }
    }
    cout<<answ<<':'<<ansl<<endl;
    return 0;
}

原文链接:https://www.cnblogs.com/Nicest1919/p/12308586.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:【做题笔记】P2871 [USACO07DEC]手链Charm Bracelet

下一篇:【做题笔记】P1969 积木大赛