小技巧
m--和--m
很多人在类似\(n\)个数据\(m\)组问题的题目中 喜欢直接用 while(m--)
比如说我
但请记住是m--
不要写成--m
不然会导致少输入一组数据 调了一下午代码调出来的
例如以下代码
?
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,m;
n=m=5;
while(--m){
cout<<m<<' ';
}
cout<<'\n';
while(n--){
cout<<n<<' ';
}
return 0;
}
!
4 3 2 1
4 3 2 1 0
#ifdef ONLINE_JUDGE
#ifdef ONLINE_JUDGE
freopen("输入.in","r",stdin);
freopen("输出.out","w",stdout);
#endif
酱紫不用注释freopen就可以在本地调试
而且提交的时候就不会file error力qwq
?
虽然不知道是什么 但是比map快
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace __gnu_pbds;
gp_hash_table<int ,int > mapp;
关于 #define int long long
OIwiki都在用\(#define int long long\)
我有什么理由不用呢
关于数据流解绑
给输入输出流解绑,使其超越scanf和printf的速度
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
注:
-
关闭了同步流,就不能用scanf和printf
否则如图
关闭后同时使用printf和cout
未关闭
你猜我为什么板子题还wa了两次 -
关闭了同步流,不能用getchar()函数
-
不能再用cout<<endl 而应该改用cout<<'\n'
通常情况下,cout<<endl会输出一个换行符并刷新输出缓冲区,造成一些时间耗费,确保内容立即显示。
但是,当使用了上述代码时,cout<<endl不再具有自动刷新缓冲区的功能。
所以即使不关闭同步流也推荐使用'\n'
关于浮点数相等的判断
因为浮点数的精度计算太过复杂
像3.14这样的数存在浮点型变量里存的可能是3.139999999,也有可能是3.140000001
所以不能直接用“==”判断两个浮点数是否相等。
在这种情况下,就允许判断两个浮点数为相等时,两数之间存在微小的误差
这个“微小的误差”要取一个较小的数
比如1e-8
这样就不会判不出也不会误判了
const double eps=1e-8;
bool eq(double x,double y){
//如果a和b之间相差的值小于eps(即1e-8),就说明它们是相等的
return fabs(x-y)<eps;//fabs用于取浮点数的绝对值
}
查错查了半天才发现打成了const int eps
关于三目运算符
a[i][j]=(i==j)
等价于
a[i][j]=i==j?1:0
关于神の逗号
如
return printf("%d",ans),0;
是合法的