常用模板

快读:

 1 inline char gc() {
 2     static char buf[100000], *p1 = buf, *p2 = buf;
 3     return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 100000, stdin), p1 == p2) ? EOF : *p1++;
 4 }
 5 
 6 //#define gc getchar
 7 inline int read() {
 8     int x = 0; char ch = gc(); bool f = 1;
 9     for (; !isdigit(ch); ch = gc()) if (ch == '-') f = -1;
10     for (; isdigit(ch); ch = gc()) x = x * 10 + ch - '0';
11     return f * x;
12 }

康托展开:

 1 LL fac[20];
 2 
 3 void init() {
 4     fac[0] = 1;
 5     for (int i = 1; i <= 15; ++i) fac[i] = fac[i - 1] * i;
 6 }
 7 
 8 LL cantor(int a[]) {
 9     LL res = 0;
10     for (int i = 1; i <= 8; ++i) {
11         int cnt = 0;
12         for (int j = i + 1; j <= 8; ++j)
13             cnt += a[j] < a[i];
14         res += cnt * fac[8 - i];
15     }
16     return res;
17 }
18 
19 void inv_cantor(int n, LL k) {
20     vector<int> vec; k--;
21     int a[20];
22     for (int i = 1; i <= n; ++i) vec.push_back(i);
23     for (int i = n; i >= 1; --i) {
24         LL p = k / fac[i - 1]; k %= fac[i - 1];
25         sort(vec.begin(), vec.end());
26         a[n - i + 1] = vec[p];
27         vec.erase(vec.begin() + t);
28     }
29     for (int i = 1; i <= n; ++i) printf("%d ", a[i]);
30 }

幂次求和:

Σ (i, 1, n) (i) = n * (n + 1) / 2 = 1 / 2 * n2 + 1 / 2 * n
Σ (i, 1, n) (i2) = n * (n + 1) * (2n + 1) / 6 = 1 / 3 * n3 + 1 / 2 * n2 + 1 / 6 * n
Σ (i, 1, n) (i3) = (n * (n + 1) / 2)2 = 1 / 4 * n4 + 1 / 2 * n3 + 1 / 4 * n2
Σ (i, 1, n) (i4) = n * (n + 1) * (2n + 1) * (3x+ 3x - 1) / 30 = 1 / 5 * n5 + 1 / 2 * n4 + 1 / 3 * n3 - 1 / 30 * n
Σ (i, 1, n) (i4) = n* (n + 1) * (2n+ 4n+ n - 1) / 12
 
海伦公式:
S = sqrt(p * (p - a) * (p - b) * (p - c));
p = (a + b + c) / 2.0;

posted @ 2017-04-16 16:16  bαcklight  阅读(262)  评论(0编辑  收藏  举报