C++ 奇淫技巧
scanf("%[^\n]", s); 读取带空格字符串
无向图 头文件 lower_bound 宏定义
并查集
/*
|合并节点操作|
|16/11/05ztx, thanks to chaixiaojun|
*/
int father[maxn]; // 储存i的father父节点
void makeSet() {
for (int i = 0; i < maxn; i++)
father[i] = i;
}
int findRoot(int x) { // 迭代找根节点
int root = x; // 根节点
while (root != father[root]) { // 寻找根节点
root = father[root];
}
while (x != root) {
int tmp = father[x];
father[x] = root; // 根节点赋值
x = tmp;
}
return root;
}
void Union(int x, int y) { // 将x所在的集合和y所在的集合整合起来形成一个集合。
int a, b;
a = findRoot(x);
b = findRoot(y);
father[a] = b; // y连在x的根节点上 或father[b] = a为x连在y的根节点上;
}
/*
在findRoot(x)中:
路径压缩 迭代 最优版
关键在于在路径上的每个节点都可以直接连接到根上
*/
#include<cstdio>
#include<cmath>
#include<vector>
#include<algorithm>
#include<iostream>
#define each(a,b,c) for(int a=b;a<=c;a++)
#define de(x) cout<<#x<<" "<<(x)<<endl;
using namespace std;
const int maxn = 1e6+5;
const int INF = 0x3f3f3f3f;
快速幂
typedef long long ll;
//如果是奇数,res乘上a,a增倍,n缩小
ll powermod(ll a, ll n, ll mod)
{
ll res = 1;
while (n > 0)
{
if (n & 1)
{
res = (res*a) % mod;
}
a = (a*a) % mod;
n >>= 1;
}
return res;
}
CSP的压缩编码是一个裸的区间DP,需要多加整理模板
int gcd(int a, int b)
{
return b == 0 ? a : gcd(b, a%b);
}
虽然放弃希望了,但是可以给队友施压