解题思路:
前面加上
ios::sync_with_stdio(false);
cin.tie(nullptr);
注意事项:
我不到啊,豆包说的:
我用最直白、最容易懂的方式告诉你:
为什么不加那两行会超时,加上就 AC?
一句话总结
cin /cout 默认很慢,那两行是给 cin /cout “开加速”,不加就会因为输入输出太慢超时。
1. 默认的 cin 为什么慢?
C++ 为了兼容 C 语言的 scanf/printf,
默认开启了同步机制:
每次 cin 读数据,都要和 C 的 stdio 同步一下。
就像:
你每写一个字,都要停下来和别人核对一遍 → 超级慢
数据量大的时候(比如蓝桥杯 1e5、1e6 数据)
cin 没加速 → 直接超时 TLE
2. 这两行到底干了什么?
cpp
运行
ios::sync_with_stdio(false);
关闭 cin 和 C 语言 scanf 的同步
→ 不用再互相核对,速度直接起飞
cpp
运行
cin.tie(nullptr);
解开 cin 和 cout 的绑定
→ cin 读的时候不用每次都刷新 cout
→ 又快一大截
3. 最直观的速度对比
表格
代码
速度
大数据量
不加那两行 慢 5~10 倍 必超时
加上那两行 和 scanf 一样快 稳稳 AC
蓝桥杯 90% 的 cin 超时,都是因为没加这两行!
4. 你只要记住一句话
写 C++ 算法题,main 函数第一行必须加这两句!
cpp
运行
int main() {
ios::sync_with_stdio(false);
cin.tie(0); // 等价于 nullptr
// ... 你的代码}
5. 最简单记忆法
不加 = 走路
加了 = 开跑车
数据量大的时候,走路当然到不了终点!
参考代码:
#include<iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin>>T;
while(T--){
long long A,B,C,K;
cin >> A >> B >> C >> K;
while(K--) {
long long newA = (B + C) / 2;
long long newB = (A + C) / 2;
long long newC = (A + B) / 2;
A = newA;
B = newB;
C = newC;
if (A == B && B == C) break;
}
cout << A << " " << B << " " << C << endl;
}
return 0;
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复