代码不开O2就对了?

P4387 【深基15.习9】验证栈序列

cat_lover1 @ 2023-10-09 21:29:16

原题地址

事情是这样的,这道题开O2就错,不开O2就对

代码如下

#define G getchar()
static inline int r(){
  int i=0,c;
  while((c=G)<48);
  for(;c>47;c=G)i=(i<<1)+(i<<3)+(c^48);
  return i;
}main(){
  int q=r();
  while(q--){
    int n=r();
    int s[n+1],p[n+1],t[n+1],top=-1,x=0,q=0;
    s[n]=p[n]=t[n]=-1;
    for(int i=0;i<n;++i)s[i]=r();
    for(int i=0;i<n;++i)p[i]=r();
    while(q<n&&x<n){
      if(top==-1)t[++top]=s[x++];
      while(p[q]!=t[top])t[++top]=s[x++];
      while(p[q]==t[top])--top,++q;
    }
    if(q<n)puts("No");
    else puts("Yes");
  }
}

by cat_lover1 @ 2023-10-09 21:45:12

地址贴错了,是这个: https://www.luogu.com.cn/record/128485982


by cat_lover1 @ 2023-10-09 21:46:06

就是初始化数组开一个定值,之前那个不是定值,是读进来的n


by zzr1208 @ 2023-10-09 21:48:26

这样好像会挂吧


上一页 |