小技巧

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);

注:

  1. 关闭了同步流,就不能用scanf和printf

    否则如图

    关闭后同时使用printf和cout

    未关闭

    你猜我为什么板子题还wa了两次

  2. 关闭了同步流,不能用getchar()函数

  3. 不能再用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;
是合法的

posted @ 2024-04-05 16:43  Elaina_0  阅读(44)  评论(2编辑  收藏  举报
浏览器标题切换
浏览器标题切换end