在i的基础上j的传递模型(乒乓球)

#include <bits/stdc++.h>
using namespace std;
const int maxn=63500;
char a[maxn];
int cnt=1;
inline int in(){
    cin>>a[1];
    while(a[cnt]!='E') cin>>a[++cnt];
    cnt-=1;//cautious:the end
}
inline int work(){
    int ca=0,cb=0;;
    for(int i=1;i<=cnt;i++){
        
        if(a[i]=='W') ca++;
        if(a[i]=='L') cb++;
        
        if(ca==11 and ca-cb>=2){
           if(i!=cnt)
           cout<<ca<<":"<<cb<<endl;
           else cout<<ca<<":"<<cb<<endl<<0<<":"<<0<<endl<<endl;
           ca=0; cb=0; continue;
        }
        
        if(cb==11 and cb-ca>=2){
            if(i!=cnt)
            cout<<ca<<":"<<cb<<endl;
            else cout<<ca<<":"<<cb<<endl<<0<<":"<<0<<endl<<endl;
            ca=0; cb=0; continue;
        }
        
        if(ca==11 or cb==11){
            for(int j=i+1;j<=cnt;j++){
                if(a[j]=='W') ca++;
                if(a[j]=='L') cb++;
                if(ca-cb>=2 or cb-ca>=2){
                    cout<<ca<<":"<<cb<<endl;
                    ca=0; cb=0;
                    i=j;
                    break;
                }
                if(j==cnt){
                    cout<<ca<<":"<<cb<<endl<<endl;
                    ca=0; cb=0;
                    i=cnt+1;
                    break;
                }
            }
        }
        
        if(i==cnt){
            cout<<ca<<":"<<cb<<endl<<endl;
            ca=0; cb=0;
        }
    }
    
    for(int i=1;i<=cnt;i++){
        
        if(a[i]=='W') ca++;
        if(a[i]=='L') cb++;
        
        if(ca==21 and ca-cb>=2){
           if(i!=cnt)
           cout<<ca<<":"<<cb<<endl;
           else cout<<ca<<":"<<cb<<endl<<0<<":"<<0;
           ca=0; cb=0; continue;
        }
        
        if(cb==21 and cb-ca>=2){
            if(i!=cnt)
            cout<<ca<<":"<<cb<<endl;
            else cout<<ca<<":"<<cb<<endl<<0<<":"<<0;
            ca=0; cb=0; continue;
        }
        
        if(ca==21 or cb==21){
            for(int j=i+1;j<=cnt;j++){
                if(a[j]=='W') ca++;
                if(a[j]=='L') cb++;
                if(ca-cb>=2 or cb-ca>=2){
                    cout<<ca<<":"<<cb<<endl;//记得最后把修改的地方去掉 
                    ca=0; cb=0;
                    i=j;
                    break;
                }
                if(j==cnt){
                    cout<<ca<<":"<<cb;
                    ca=0; cb=0;
                    i=cnt+1;
                    break;
                }
            }
        }
        
        if(i==cnt){
            cout<<ca<<":"<<cb;
            ca=0; cb=0;
        }
    }
}
inline int spe(){
    if(cnt==0){
        cout<<0<<":"<<0<<endl<<endl;
        cout<<0<<":"<<0;
    }
}
int main(){
    in();
    work();
    spe();
}


优化版(下面)


#include<cstdio>
using namespace std;
int a[5000][2];
int main()
{
    char x;
    int n11=0,m11=0,n21=0,m21=0,i=0,s;
    scanf("%c",&x);//输入
    while(x!='E')//判断是否结束
    {
        if(x=='W')//如果华华得分
        {
            n11++;//华华的11分制的记录++
            n21++;//华华的21分制的记录++
        }
        if(x=='L')//如果对手得分
        {
            m11++;//对手的11分制的记录++
            m21++;//对手的21分制的记录++
        }
        if(n11+2<=m11&&m11>=11||m11+2<=n11&&n11>=11)//如果符合要求(11分制)
//边读入边处理这样没必要再模拟过程 
        {
            printf("%d:%d\n",n11,m11);//直接输出
            n11=0;//清零
            m11=0;//清零
        }
        if(n21+2<=m21&&m21>=21||m21+2<=n21&&n21>=21)//如果符合要求(21分制)
        {
            a[i][0]=n21;//记录华华的分
            a[i][1]=m21;//记录对手的分
            n21=0;//清零
            m21=0;//清零
            i++;//记录记录过的位置
        }
        scanf("%c",&x);//再输入一个
    }
    printf("%d:%d\n",n11,m11);//输出残留
    printf("\n");//换行
    s=i;//记录位置,留出i
    for(i=0;i<s;i++)
        printf("%d:%d\n",a[i][0],a[i][1]);//21分制输出
    printf("%d:%d\n",n21,m21);//输出残留
    return 0;
}
//类似于在线处理 



最新联系,把代码变得更简洁:

#include <bits/stdc++.h>
using namespace std;
#define maxn 63500
char a[maxn];
int cnt=1,ca1,ca2,cb1,cb2;
int main(){
cin>>a[cnt];
if(a[cnt]=='W') ca1++;
if(a[cnt]=='L') cb1++;
while(a[cnt]!='E'){
cin>>a[++cnt];
if(a[cnt]=='W') ca1++;
if(a[cnt]=='L') cb1++;
if(ca1>=11 and ca1-cb1>=2 or cb1>=11 and cb1-ca1>=2){//对逻辑语掌握不熟练这样可以避免重复模拟
cout<<ca1<<":"<<cb1<<endl;
ca1=0; cb1=0;
}
}
cout<<ca1<<":"<<cb1<<endl<<endl;
cnt-=1;
for(int i=1;i<=cnt;i++){
if(a[i]=='W') ca2++;
if(a[i]=='L') cb2++;
if(ca2>=21 and ca2-cb2>=2 or cb2>=21 and cb2-ca2>=2){
if(i!=cnt) cout<<ca2<<":"<<cb2<<endl;
else cout<<ca2<<":"<<cb2;
ca2=0; cb2=0;
}
}
cout<<ca2<<":"<<cb2;
}

 

 

posted @ 2018-07-19 20:55  TimDucan  阅读(264)  评论(0编辑  收藏  举报