编 译 失 败 怎 么 办 啊 ?

B3662 [语言月赛202209] 山峰

@[xibaby](/user/995569) 在C++14下,在全局定义x1,y1,xx,yy等我也记不清了会CE
by zyh0516_lucky @ 2023-11-05 00:39:23


@[2022zhangyuanhao](/user/746930) 这个问题倒是的,只是如何纠正大错误呢? ``` #include<bits/stdc++.h> using namespace std; int n,m,a[1001][1001],t,s,b[2001]; int main(){ int x1=0,y1=0,x2=0,y2=0; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); scanf("%d",&t); while(t--){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); swap(a[x1][y1],a[x2][y2]); } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]>a[i-1][j]&& a[i][j]>a[i+1][j]&& a[i][j]>a[i][j-1]&& a[i][j]>a[i][j+1]){ s++; b[s]=i,b[s+1]=j; } printf("%d\n",s); for(int i=1;i<=2*s;i++) printf("%d %d\n",b[i],b[i+1]); return 0; } ```
by xibaby @ 2023-11-05 00:44:34


@[xibaby](/user/995569) 求关注 ### 因为b数组.是访问n×m次的,如果每次都有(当然不可能),保险起见开n×m,是的还要再×2,因为每次s不应该++而应该+=2。数组范围:n×m×2=1000×1000×2=2000005,实际不可能都是山峰,但还是为了保险,虽然有点无脑(还好没MLE)。 ```cpp #include<bits/stdc++.h> using namespace std; int n,m,a[1001][1001],t,s,b[2000005]; int main(){ int x,y,aa,bb; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); scanf("%d",&t); while(t--){ scanf("%d%d%d%d",&x,&y,&aa,&bb); swap(a[x][y],a[aa][bb]); } s=1; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) if(a[i][j]>a[i-1][j]&& a[i][j]>a[i+1][j]&& a[i][j]>a[i][j-1]&& a[i][j]>a[i][j+1]){ b[s]=i,b[s+1]=j; s+=2; } printf("%d\n",(s-1)>>1); for(int i=1;i<s;i+=2) printf("%d %d\n",b[i],b[i+1]); return 0; } ```
by zyh0516_lucky @ 2023-11-05 07:27:25


@[2022zhangyuanhao](/user/746930) y0,y1,yn,j0,j1,jn是cpp保留字,不能全局定义
by Shiota_Kaede @ 2023-11-05 07:47:15


@[Shiota_Kaede](/user/400269) 正确的呢
by zyh0516_lucky @ 2023-11-05 12:17:54


@[2022zhangyuanhao](/user/746930) @[Shiota_Kaede](/user/400269) 非常感谢!!!
by xibaby @ 2023-11-05 12:34:20


|