做P1596时出现了两个玄学问题
代码cin>>(a[i]+1)(a是字符二位数组,前面有char a[105][105])在 C++20(luogu)上CE,而在其他 C++ 语言上通过编译
我先跳过问题一,把cin>>(a[i]+1)改成了scanf("%s",a[i]+1)
这是我的代码:
#include<bits/stdc++.h>
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
//#define int long long
using namespace std;
#define check(i,j) ((i)>=1&&(i)<=n&&(j)>=1&&(j)<=m)
int n,m,ans;
char a[105][105];
bool flag[105][105];
int d[8][2]={
{-1,-1},{-1,0},{-1,1},
{0,-1}, {0,1},
{1,-1}, {1,0}, {1,1}
};
void dfs(int x,int y){
F(i,0,7){
int xx=x+d[i][0],yy=y+d[i][1];
if(check(xx,yy)&&!flag[xx][yy]&&a[xx][yy]=='W'){
flag[xx][yy]=1;
dfs(xx,yy);
}
}
}
signed main () {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
F(i,1,n) scanf("%s",a[i]+1);
F(i,1,n)F(j,1,m){
if(a[i][j]=='W'&&!flag[i][j]){
flag[i][j]=1;
dfs(i,j);
ans++;
}
}
cout<<ans;
return 0;
}
只得了20pts
但是,注释掉cin优化,即
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
后,AC
求大佬解决这两个玄学问题!