求助,只有#8对了

P1042 [NOIP2003 普及组] 乒乓球

SCP_wiki @ 2024-10-03 16:03:41

#include<bits/stdc++.h>
using namespace std;
char s;
int a[1000001],b[1000001];
int c,d;
int main(){
    int t=0;
    while(1){
        cin>>s;
        if(s=='E'){
            break;
        }else if(s=='W'){
            a[t]++; 
        }else if(s=='L'){
            b[t]++;
        }
        t++;
    }
    for(int i = 0;i<t;i++){
        if(a[i]!=0){
            c++;
        }else{
            d++;
        }
        if(c>=11){
            cout<<c<<':'<<d<<endl;
            c=0;
            d=0;
        }else if(d>=11){
            cout<<c<<':'<<d<<endl;
            c=0;
            d=0;
        }   
    }
    if(c!=0&&d!=0){
        cout<<c<<':'<<d<<endl;
    }
    c=0;
    d=0; 
    cout<<endl;

    for(int i = 0;i<t;i++){
        if(a[i]!=0){
            c++;
        }else{
            d++;
        }
        if(c>=21){
            cout<<c<<':'<<d<<endl;
            c=0;
            d=0;
        }else if(d>=21){
            cout<<c<<':'<<d<<endl;
            c=0;
            d=0;
        }   
    }
    if(c!=0&&d!=0){
        cout<<c<<':'<<d<<endl;
    }
    c=0;
    d=0; 
    return 0;
}

by XURUIFAN @ 2024-10-03 16:17:31

有没有一种可能,第一次for中你的c在d>11后被刷新了,但是后面仍有a[i]!=0,并且后面所有的b[i]均为0,并且在循环结束时c是小于11的。那这种情况下,你应该输出一个c:0然后进行21分制对吧,但是你的第一次循环结束后,判断条件用的是&&,此时d为0,不符合条件所以没输出,然后你直接给人全刷新了。
找不到重点不会加粗,见谅
轻喷


by XURUIFAN @ 2024-10-03 16:20:45

@XURUIFAN 这个似乎不是全部的问题,改后记录是30分
但是确实是问题


by XURUIFAN @ 2024-10-03 16:23:39

你的思路和题解第一篇相似,可以对照一下


by lx01220122 @ 2024-10-03 21:43:48

0:0也要输出


|