40分求调

P1042 [NOIP2003 普及组] 乒乓球

lyb_qhd @ 2024-10-07 17:44:21

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define up(i,l,r) for(ll i=l;i<=r;i++)
#define clr(a) memset(a,0,sizeof(a))
bool ar[90000];
ll n=0;
void input() {
    char x;
    while(cin>>x) {//auto skip \n
        if (x=='W') ar[++n]=1;
        if (x=='L') ar[++n]=0;
        if (x=='E') break;
    }
}
void work(ll step) {
    ll w,l,c,flag=0;
    w=l=c=0;
    up(i,1,n) {
        if (c==step) 
            flag=1,
            printf("%d:%d\n",w,l),
            w=l=c=0;
        if (ar[i])  w++;
        else        l++;
        c++;
    }
    if (c||!flag) printf("%d:%d\n",w,l);
}
int main() {
    clr(ar);
    input();
    work(11);
    cout<<endl;
    work(21);
    return 0;
}

by linshangyun @ 2024-10-09 21:16:39

你的 work 函数要改一下,if 的条件不是 c==step。你可以想一下,在现实中并不是一局就打11个球(或21个)而是当有人打到11个球时结束。所以不能用 c 来记录次数。 另外题目中说直到分差大于或者等于2,才一局结束。


by linshangyun @ 2024-10-09 21:26:27

可以用c记录次数,但不能用来判断一局是否结束


|