1. 程式人生 > >ACM 常用小 Trick

ACM 常用小 Trick

//{{{ #include
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <complex>
//}}}//#include <bits/stdc++.h>
using namespace std; typedef long long ll; typedef long double ld; typedef double db; typedef pair<int,int> pii; typedef vector<int> vi; #define mp make_pair #define fi first #define se second #define sf scanf #define pf printf #define pn printf("\n") #define ls l,mid,rt<<1 #define
rs mid+1,r,rt<<1|1
#define pb push_back #define all(x) (x).begin(),(x).end() #define de(x) cout << #x << "=" << x << endl #define dd(x) cout<< #x<<" = "<<x<<" " #define rep(i,a,b) for(int i=a;i<(b);++i) #define per(i,a,n) for (int i=n-1;i>=a;i--)
#define mem(a,b) memset(a,b,sizeof(a)) #define sz(x) (int)(x).size() const int INF=0x3f3f3f3f; const double eps=1e-8; const double PI=acos(-1.0); const int N = 101010; int sgn(double x){if(fabs(x)<eps)return 0;if(x<0)return -1;else return 1;} ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);} // fast-pow int Pow(ll x,ll t,int p) {ll r=1;for(;t;t>>=1,x=x*x%p)if(t&1)r=r*x%p;return r;} // add-mod const int MOD = 1e9 + 7; void pp(int &x,int d) {if((x+=d)>=MOD) x-=MOD;} // minus-mod -> pp(a , P - x); // multiply-mod int mul(int a,int b){ return ll(a)*b%MOD;} // inversion int inverse(int x,int p) {return Pow(x,p-2,p);} // p should be prime // tree-dp vi g[N]; int sz[N]; void dfs(int c,int par){ sz[c] = 1; for(auto t : g[c]) if(t != par){ // c++11 dfs(t , c); sz[c] += sz[t]; } } // dsu int fa[N]; int F(int x){ return fa[x] == x ? x : fa[x] = F(fa[x]);} void M(int x,int y){ fa[F(x)] = F(y);} int main(){ // swap int u = 0, v = 1; std::swap(u , v); // swap set<int> A , B; std::swap(A , B); // O(1) // minimal & maximal int a[20] , n = 20; rep(i,0,n) a[i] = i; cout << *std::max_element(a , a + n) << endl;// [a , a+n) cout << *std::min_element(a , a + n) << endl; // discretization vi V;// about 10 int sort(all(V));V.erase(unique(all(V)),V.end()); #define rk(x) upper_bound(all(V) , x) - V.begin() // deal with same value for(int i=0,j=0;i<sz(V);i=j) { for(j=i;j<sz(V)&&V[j]==V[i];++j); // Cal(i , j) //[i , j) } // multiple-loops int g[10][10] , m = 10; rep(i,0,m) rep(j,0,m) scanf("%d",&g[i][j]); // __builtin_popcount() int cnt1[1<<6]; rep(i,1,1<<6) cnt1[i] = cnt1[i >> 1] + (i & 1); // sort int cnt[20]; sort(all(V),[&](int a,int b){return cnt[a]<cnt[b];}); // c++11 vector<vi> Vv; sort(all(Vv)); // sort with id vector<pii> p; rep(i,0,20) p.pb(mp(rand(),i)); sort(all(p)); // deal with subsets rep(mask,0,1<<10) for(int j=mask;j;j=(j-1)&mask) ;// Cal // high-dimensional prefix-sum int f[1<<10]; rep(i,0,10) rep(j,0,1<<10) if(j>>i&1) pp(f[j],f[j^(1<<i)]); // permutation rep(i,0,7) a[i] = i; do{ // Cal; }while(next_permutation(a , a + 7)); // fill function std::fill(a , a + 20 , 0);// fill any number // reference int &r=f[10]; rep(i,0,10) r+=i; // ternary operator int C[10][10] = {{1}}; rep(i,1,10) rep(j,0,i+1) C[i][j] = j ? (C[i-1][j-1] + C[i-1][j]) : 1; return 0; }