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( , , );也可以去掉,因为后面不用访问未重新输入的地方。
- THE END -
最后修改:2024年11月16日
非特殊说明,本博所有文章均为博主原创,未经许可不得转载。
如经许可后转载,请注明出处:https://prolightsfxjh.com/article/uestc-1024-flying-chess/
共有 0 条评论