UESTC 1024 Flying Chess 注意那个 1

ProLightsfx 2015-12-2 127 12/2

Flying Chess 注意那个 1<x<N 不是1<=x<N 模拟

My Solution

十分钟左右就把题目搞完了,然后,明明觉得自己对的,却是不对的,找bug找了好久,才发现

那个 1<x

把前面错掉的程序中a==b改为a==b&&a!=1  就对了
#include 
#include 
#include 
using namespace std;
const int maxn=10000+8;
int A[maxn],B[maxn];

int main()
{
    int T,N,M,At,Bt,a,b,aar,bar;
    scanf("%d",&T);
    while(T--){
        memset(A,0,sizeof(A));memset(B,0,sizeof(B));At=0;Bt=0;a=0;b=0;aar=0;bar=0;
        scanf("%d%d",&N,&M);
        for(int i=0;i<M;i++)
            scanf("%d",&A[i]);
        for(int i=0;i<M;i++){
            scanf("%d",&B[i]);           //这里的优化和那个任意阶矩阵乘法的优化差不多。
        }
        for(int i=0;i<M;i++){ if(A[i]==6&&At==0) {At=1;a=1;} else if(At==1) a+=A[i]; if(a==b&&a!=1) {b=0;Bt=0;} // if(a>=N) {aar++;At=0;a=0;if(aar==2)break;}

            if(B[i]==6&&Bt==0) {Bt=1;b=1;}
            else if(Bt==1) b+=B[i];
            if(a!=1&&a==b) {a=0;At=0;}
            if(b>=N) {bar++;Bt=0;b=0;if(bar==2)break;}
        }
        if(aar==2) printf("Ye.Dong");
        else if(bar==2) printf("Ye.Han");
        else printf("Tie.");  //小 点点 不要掉了
        if(T) printf("n");
    }
    return 0;
}

可以优化:1、加一个记忆变量的话可以再少扫一遍。直接在读B的时候处理,答案在读完之前就出来了,为了把后来无效的数字从缓冲区吸掉,

等它全读完就可以输出答案了(这么搞如果不读完出答案就break会有数字留在缓冲区被下一组读入,所以读完再自然的出循环)。
                  2、At,Bt可以省去,用a,b是否是0就好了。但像这样有At、Bt清晰一点吧,反正也不大。
                  3、mems( , , );也可以去掉,因为后面不用访问未重新输入的地方。

非特殊说明,本站所有文章均为博主原创,未经许可不得转载。

https://www.prolightsfxjh.com/

Thank you!

                                                                                                                                             ------from ProLightsfx

- THE END -

ProLightsfx

11月16日08:56

最后修改:2024年11月16日
0

非特殊说明,本博所有文章均为博主原创,未经许可不得转载。

共有 0 条评论