78分求助!!!
查看原帖
78分求助!!!
373226
justinjia楼主2020/12/31 17:19

唉,离AC\colorbox{green}{\color{white}AC}只有一步之遥,偏偏#1\#1测试点WA\colorbox{red}{\color{white}WA}#6\#6测试点TLE\colorbox{darkblue}{\color{white}TLE},这是怎么回事?

话不多说,先给各位大佬献上代码:

#include"stdio.h"
char m[10][10],sm[10][10],fd='n',cd='n';
int fx,fy,cx,cy,time_/*time貌似是C++的关键字*/;
void turn(char &d){
    switch(d){
        case 'n':
            d='e';
            break;
        case 'e':
            d='s';
            break;
        case 's':
            d='w';
            break;
        case 'w':
            d='n';
            break;
    }
}
bool in(int x,int y){
    return x>=0&&x<10&&y>=0&&y<10;
}
bool move(void){
    bool meet=0;
    int ftx,fty,ctx,cty;
    switch(fd){
        case 'n':
            ftx=fx-1;
            fty=fy;
            break;
        case 'e':
            ftx=fx;
            fty=fy+1;
            break;
        case 's':
            ftx=fx+1;
            fty=fy;
            break;
        case 'w':
            ftx=fx;
            fty=fy-1;
            break;
    }
    switch(cd){
        case 'n':
            ctx=cx-1;
            cty=cy;
            break;
        case 'e':
            ctx=cx;
            cty=cy+1;
            break;
        case 's':
            ctx=cx+1;
            cty=cy;
            break;
        case 'w':
            ctx=cx;
            cty=cy-1;
            break;
    }
    if(!in(ftx,fty)||m[ftx][fty]=='*')
        turn(fd);
    else{
        m[ftx][fty]='F';
        m[fx][fy]='.';
        fx=ftx;
        fy=fty;
    }
    if(!in(ctx,cty)||m[ctx][cty]=='*')
        turn(cd);
    else{
        if(m[ctx][cty]=='F')
            meet=1;
        m[ctx][cty]='C';
        m[cx][cy]=(m[cx][cy]=='F'?'F':'.');
        cx=ctx;
        cy=cty;
    }
    time_++;
    return meet;
}
int main(void){
    for(int i=0;i<10;i++){
        scanf("%s",m[i]);
        for(int j=0;j<10;j++)
            sm[i][j]=m[i][j];
    }
    for(int i=0;i<10;i++)
        for(int j=0;j<10;j++){
            if(m[i][j]=='F'){
                fx=i;
                fy=j;
            }
            if(m[i][j]=='C'){
                cx=i;
                cy=j;
            }
        }
    while(1){
        if(move()){
            printf("%d",time_);
            return 0;
        }
        bool flag=1;
        for(int i=0;i<10;i++)
            for(int j=0;j<10;j++)
                if(m[i][j]!=sm[i][j]){
                    flag=0;
                    goto out;
                }
        printf("0");
        return 0;
        out:;
    }
    return 0;
}
2020/12/31 17:19
加载中...