关于cin优化
  • 板块学术版
  • 楼主konyakest
  • 当前回复18
  • 已保存回复18
  • 发布时间2022/2/14 22:26
  • 上次更新2023/10/28 08:30:40
查看原帖
关于cin优化
482660
konyakest楼主2022/2/14 22:26

做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

求大佬解决这两个玄学问题!

2022/2/14 22:26
加载中...