今天做HNCPC2015重现赛,做到《简单的图论问题?》怎么交,怎么WA,赛后补题发现一个致命今天做HNCPC2015重现赛,做到《简单的图论问题?》怎么交,怎么WA,赛后补题发现一个致命错误,看WA代码片段:
ios::sync_with_stdio(false);
cin.tie(nullptr);
int Case=0;
while(cin >> n >> m >> r1 >> c1 >> r2 >> c2)
{
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
char s[4];
scanf("%s",s);
if(s[0]=='*')mp[i][j]=-1;
else mp[i][j]=atoi(s);
}
}
printf("Case %d: %d %d\n",++Case,bfs1(r1,c1),bfs2(r1,c1));
}
为了加快cin和cout输入输出流,加上<ios::sync_with_stdio(false);cin.tie(nullptr);>关闭流经过缓冲区以及和stdin的绑定,结果怎么交怎么错。后来,把这两行代码注释掉后提交就AC了!!爷裂了。以后比赛还是不用cin和cout了,老老实实用scanf和printf吧.......本来想cin和cout刷刷刷打过去,还是用回scanf吧....还是得追求稳定和效率.....
这里讲点小知识吧。
为什么两句代码加快流速度?
`std::ios::sync_with_stdio(false);`在c++中之所以cin,cout效率低,是因为先把要输出的东西存入缓冲区,再输出,导致效率降低,而这段语句可以来打消iostream的输入和输出缓存,可节省时间,使效率与scanf与printf相差无几。
`cin.tie(nullptr);`在默认的情况下cin绑定的是cout,每次执行 << 操作符的时候都要调用flush,这样会增加IO负担。可以通过tie(0)(0表示NULL)来解除cin与cout的绑定,进一步加快执行效率。
网上查阅资料时,都在强调, 不要混用!不要混用!不要混用!今日,见识到了,欸,习惯太差了.......
有人能帮我解释一下为什么错误吗?