zoukankan      html  css  js  c++  java
  • spoj TSUM

    题目链接

    首先忽略 i < j < k这个条件。

    那么我们构造多项式

    [A(x) = sum_{1<=i<=N} x^{A_i} ]

    显然答案就是 $ A^3(x) $中 $ x^S $的系数。

    现在我们考虑容斥:


    1. $ (sum_{}x)^3 = sum_{}x^3 + 3sum_{}x^2 y + 6sum_{}xyz $

    2. $ (sum_{}x^2)(sum_{}x) = sum_{}x^3 + sum_{}x^2 y $

    3. $ (sum_{}x)^3 = sum_{}x^3 ( <br> <br> 由上面三个式子 我们可以推导出<br><br> ) sum_{}xyz = frac {(sum_{}x)^3 - 3(sum_{}x^2)(sum_{}x) + 2sum_{}x^3}{6} $

    1式中的系数3, 是因为相当于从3个(x+y+z)中选2个x和一个y, 那么就是$ C_3^2 cdotp C_1^1 $

    6 就是选一个x一个y一个z, 显然是 $ C_3^1 cdotp C_2^1 $


    然后问题就解决了, 套fft模板就好。




    第一次用markdown还有点小激动。

    ```C++ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define pb(x) push_back(x) #define ll long long #define mk(x, y) make_pair(x, y) #define lson l, m, rt<<1 #define mem(a) memset(a, 0, sizeof(a)) #define rson m+1, r, rt<<1|1 #define mem1(a) memset(a, -1, sizeof(a)) #define mem2(a) memset(a, 0x3f, sizeof(a)) #define rep(i, n, a) for(int i = a; i cmx; typedef pair pll; const double PI = acos(-1.0); const double eps = 1e-8; const int mod = 1e9+7; const int inf = 1061109567; const int dir[][2] = { {-1, 0}, {1, 0}, {0, -1}, {0, 1} }; const int maxn = 2e5+5; int c[maxn], val[maxn], a[maxn], b[maxn]; cmx x[maxn], y[maxn]; void change(cmx x[], int len) { int i, j, k; for(i = 1, j = len/2; i < len - 1; i++) { if(i < j) swap(x[i], x[j]); k = len / 2; while(j >= k) { j -= k; k /= 2; } if(j < k) j += k; } } void fft(cmx x[], int len, int on) { change(x, len); for(int i = 2; i <= len; i <<= 1) { cmx wn(cos(-on * 2 * PI/i), sin(-on * 2 * PI/i)); for(int j = 0; j < len; j += i) { cmx w(1, 0); for(int k = j; k < j + i/2; k++) { cmx u = x[k]; cmx v = x[k + i/2]*w; x[k] = u + v; x[k+i/2] = u - v; w *= wn; } } } if(on == -1) { for(int i = 0; i < len; i++) x[i] /= len; } } int main() { int n, maxx = 0; cin>>n; for(int i = 0; i < n; i++) { scanf("%d", &val[i]); val[i] += 20000; maxx = max(maxx, val[i]); } maxx *= 3; for(int i = 0; i < n; i++) { a[val[i]]++; b[val[i]*2]++; c[val[i]*3]++; } int len = 1; while(len < maxx) len <<= 1; for(int i = 0; i < len; i++) { x[i] = cmx(a[i], 0); y[i] = cmx(b[i], 0); } fft(x, len, 1); fft(y, len, 1); cmx three(3.0, 0); for(int i = 0; i < len; i++) { x[i] = x[i]*x[i]*x[i] - x[i]*y[i]*three; } fft(x, len, -1); for(int i = 0; i < len; i++) { a[i] = (int(x[i].real() + 0.5) + 2*c[i])/6; } for(int i = 0; i < len; i++) { if(!a[i]) continue; printf("%d : %d ", i-3*20000, a[i]); } return 0; } ```
  • 相关阅读:
    万豪酒店数据库遭入侵 5亿顾客信息或泄露
    网络信息安全中最热门的果然是它
    有奖问卷调查丨你有意见?可以提啊!
    业务逻辑漏洞探索之绕过验证
    一个月薪两万的Web安全工程师要掌握哪些技能?
    phpcms2008远程代码执行漏洞
    BASE64编码原理分析脚本实现及逆向案例
    源码级调试的XNU内核
    使用RSA加密在Python中逆向shell
    感恩节活动中奖名单 i春秋喊你领礼物啦!
  • 原文地址:https://www.cnblogs.com/yohaha/p/5294081.html
Copyright © 2011-2022 走看看