🔖【常用】随便写点东西

1. 流读写解绑

std :: ios :: sync_with_stdio(false);
std :: cin.tie(0);
std :: cout.tie(0);

2. mt19937

#include <stdio.h>
#include <chrono>
#include <random>
signed main() {
	unsigned seed = std :: chrono :: system_clock :: now().time_since_epoch().count();
	std :: mt19937 rand_int(seed);
	for(int i = 1;i <= 20;++i) 
		printf("%d\n",rand_int());
}
//增加限制;
#include <stdio.h>
#include <chrono>
#include <random>
signed main() {
	unsigned seed = std :: chrono :: system_clock :: now().time_since_epoch().count();
	std :: mt19937 rand_int(seed);
	std :: uniform_int_distribution<int> rand_a(1,998244353);
	for(int i = 1;i <= 20;++i) 
		printf("%d\n",rand_a(rand_int));
}

3. 手动开\(\mathtt{O2}\)优化

#pragma GCC optimize(2)
//您也可以换成3,即开O3优化;

4. 懒人快读

char _tc;
bool _sg;
template<typename Tec>
void get_int(Tec &_aim) {
	_sg = false, _tc = getchar(), _aim = 0;
	for(;!isdigit(_tc);_tc = getchar()) 
		if(_tc == '-') _sg = true;
	for(;isdigit(_tc);_tc = getchar()) 
		_aim = (_aim<<1)+(_aim<<3)+(_tc^48);
	if(_sg) {
		_aim = ~_aim;
		++_aim;
	}
}//用isdigit()是因为库函数实在是太快了;
template<typename Tec,typename ...Args>
void get_int(Tec &_aim,Args &...args) {
	get_int(_aim);
	get_int(args...);
}

5. Fread快读与Fwrite快写

namespace Fread {
	const int Fread_size = (1<<18);
	char Fread_buf[Fread_size];
	char *Fread_h, *Fread_t;
	char getchar() {
		if(Fread_h == Fread_t) {
			Fread_t = (Fread_h = Fread_buf)+fread(Fread_buf,1,Fread_size,stdin);
			if(Fread_h == Fread_t) return '\n';
		}
		return *Fread_h++;
	}
}
namespace Fwrite {
	const int Fwrite_size = (1<<18);
	char Fwrite_buf[Fwrite_size];
	char *Fwrite_h = Fwrite_buf, *Fwrite_t = Fwrite_buf+Fwrite_size;
	void flush() {
		fwrite(Fwrite_buf,1,Fwrite_h-Fwrite_buf,stdout);
		Fwrite_h = Fwrite_buf;
	}
	void putchar(char _target) {
		*Fwrite_h++ = _target;
		if(Fwrite_h == Fwrite_t) 
			flush();
	}
	struct FLUSH_PASS {
		~FLUSH_PASS() { flush(); }
	} fpl;
}

6. 这些字符是?

\[-1 \implies \mathtt{EOF} \]

\[0 \implies \mathtt{NULL} \]

\[8 \implies \mathtt{BackSpace} \]

\[9 \implies \mathtt{Tab} \]

\[10 \implies \mathtt{\setminus n} \]

\[13 \implies \mathtt{\setminus r} \]

\[32 \implies \mathtt{Space} \]

7. 火车头

大的要来了
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#pragma GCC target("avx")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("inline")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-ffast-math")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("inline-functions")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("no-stack-protector")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("inline-small-functions")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("inline-functions-called-once")
#pragma GCC optimize("-fdelete-null-pointer-checks")

8. 算法庫的好東西:

8.1. lexicographical_compare 函數

\(\texttt{std :: lexicographical_compare(_II1 __first1, _II1 __last1, _II2 __first2, _II2 __last2)}\)

這個函數會通過給定的四個迭代器比較兩個容器。

如果用的是正常的 \(\texttt{iterator}\) ,就會從下標 \(0\) 開始比較。

反之如果用 \(\texttt{reverse iterator}\) ,就會從末尾元素比較。

如果 \(1 > 2\) 返回 \(\texttt{false}\) ,否則返回 \(\texttt{true}\)

例 1 :

std :: vector<int> a, b;
a.push_back(9);
a.push_back(9);
b.push_back(2);
b.push_back(8);
printf("%d\n",std::lexicographical_compare(a.rbegin(),a.rend(),b.rbegin(),b.rend()));

輸出:

0

例 2 :

std :: vector<int> a, b;
a.push_back(9);
a.push_back(1);
b.push_back(2);
b.push_back(8);
printf("%d\n",std::lexicographical_compare(a.rbegin(),a.rend(),b.rbegin(),b.rend()));

輸出 :

1

9. ???

求数组最大值:

#include <iostream>
#include <random>
#include <ctime>
int max(int *begin,int* end) {
	#define D(x) mx##x=0
	int D(0),D(1),D(2),D(3),D(4),D(5),D(6),D(7);
	#define CMP(x) if(*(begin+x) > mx##x)mx##x=*(begin+x)
	while(begin != end) {
		CMP(0);CMP(1);CMP(2);CMP(3);
		CMP(4);CMP(5);CMP(6);CMP(7);
		begin += 8;
	}
	#define CC(x1,x2) if(mx##x1>mx##x2)mx##x2=mx##x1
	CC(1,0);CC(3,2);CC(5,4);CC(7,6);
	CC(2,0);CC(6,4);
	CC(4,0);
	return mx0;
}
const int N = 1e7+5;
int a[N], n = 10000000;
int main() {
	std :: mt19937 rand_int(2354562);
	std :: uniform_int_distribution<int> rand_a(1,998244353);
	for(int i = 1;i <= n;++i) 
		a[i] = rand_a(rand_int);
	double stamp = clock();
	std :: cout << max(a+1,a+n+1) << std :: endl;
	std :: cout << (clock()-stamp)/CLOCKS_PER_SEC << std :: endl;
	return 0;
}
posted @ 2022-07-30 17:36  bikuhiku  阅读(29)  评论(4编辑  收藏  举报