0

私のアルゴは正しいと思います(非常に悪い方法で行われる可能性があります)。ideone.com で目的の出力が得られます。しかし、SPOJ では、「Runtime Error NZEC」と言い続けました。次に、「sys.exit(0)」を追加しました。その後、NZEC エラーは停止しました。しかし、今では「間違った答え」が表示されます

これを正しく行うために、いくつかの変更を提案してください。

質問へのリンクは次のとおりです。

http://www.spoj.com/problems/RAFANOLE/

これが私のコードです:

def main():
    import sys;
    inp=sys.stdin.read().split("\n");
    t=int(inp[0]);
    i=1;
    g_N=dict();
    g_D=dict();
    t_N=dict();
    t_D=dict();
    while(i<t+1):
        a=inp[i].split();
        game_N =0;
        curr_N =0;
        game_D =0;
        curr_D =0;
        tie_N=0;
        tie_D=0;
        k=0;
        n=len(a);
        while ((k<n)and((game_N<6)or(game_D<6))):
            if(a[k]=='N'):
                curr_N = curr_N +1;
                if(curr_N==4 and curr_D < 3):
                    game_N=game_N +1;
                    curr_N=0;
                    curr_D=0;
                if(curr_N==3 and curr_D ==3) :
                    while(a[k]!=a[k+1]):
                        k=k+1;
                    if(a[k]=='N'):
                        game_N=game_N+1;
                        curr_N=0;
                        curr_D=0;
            if(a[k]=='D'):
                curr_D=curr_D+1;
                if(curr_D==4 and curr_N<3):
                  game_D=game_D+1;
                  curr_D=0;
                  curr_N=0;
                if(curr_N==3 and curr_D ==3) :
                   while(a[k]!=a[k+1]):
                       k=k+1;
                   if(a[k]=='D'):
                       game_D=game_D+1;
                       curr_N=0;
                       curr_D=0;
            k=k+1;
        if((game_N==6 and game_D==5 ) or (game_N==5 and game_D==6)):
            curr_N=0;
            curr_D=0;
            while(game_N != 7 and game_D != 7):
                if (a[k]=='N'):
                    curr_N=curr_N+1;
                if(a[k]=='D'):
                    curr_D=curr_D+1;
                if(curr_N==4 and curr_D<3):
                    game_N=game_N+1;
                    curr_D=0;
                    curr_N=0;
                if(curr_D==4 and curr_N<3):
                    game_D=game_D+1;
                    curr_N=0;
                    curr_D=0;
        if (game_N==6 and game_D ==6):
            while (1):
                if(a[k]=='N'):
                    tie_N=tie_N+1;
                if(a[k]=='D'):
                    tie_D=tie_D+1;
                if(((tie_D==7 or tie_N==7) and (abs(tie_D-tie_N)>=2)) or ((tie_D>7 or tie_N>7)and(abs(tie_D-tie_N)>=2))):
                    k=k+1;
                    break;
                k=k+1;

        if(tie_N>tie_D):
            game_N=game_N+1;
        elif(tie_N<tie_D) :
            game_D=game_D+1;
        g_N[i]=game_N;
        g_D[i]=game_D;
        t_N[i]=tie_N;
        t_D[i]=tie_D;

        i=i+1;
    i=1;
    while(i<t+1):        
        if(g_N[i]>g_D[i]):
            if(t_N[i]==0 and t_D[i] ==0):
                print ("N %d" % g_N[i]);
                print ("D %d" % g_D[i]);
                print "\t";
            else :
                print ("N %d(%d-%d)"%(g_N[i],t_N[i],t_D[i]));
                print ("D %d" % g_D[i]);
        else:
            if(t_N[i]==0 and t_D[i] ==0):
                print ("D %d" % g_D[i]);
                print ("N %d" % g_N[i]);
            else :
                print ("D %d(%d-%d)"%(g_D[i],t_D[i],t_N[i]));
                print ("N %d" % g_N[i]);
        i=i+1;
    sys.exit(0)
if __name__=="__main__":
    main();
4

1 に答える 1

0

あなたはチェックします

if((game_N==6 and game_D==5 ) or (game_N==5 and game_D==6)):
        curr_N=0;
        curr_D=0;
        while(game_N != 7 and game_D != 7):

ここが間違いです。if の条件の後に が続く場合がありますがgame_N=6,game_d=D、これはシナリオでは考慮されません。一方が 6 で他方が 5 の場合、任意の 1 が 7 に達するまで繰り返し、引き分け条件が発生しないようにします。

于 2013-11-08T18:41:09.013 に答える