题目描述

题解:

很吊的容斥+$FFT$,但是并不难。

首先,由于有重复,我们要容斥。

怎么办?

记录三个多项式,

只取一个:$w1$;

相同物体拿两个:$w2$;

相同物体拿三个:$w3$;

然后答案能推出来是$(w1*w1*w1-3*w1*w2+2*w3)/6$;

然后$FFT$瞎搞就行了。

注意有负数,同时扩大再瞎搞。

代码:

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define N 300000
  7. #define ll long long
  8. const double Pi = acos(-1.0);
  9. template<typename T>
  10. inline void read(T&x)
  11. {
  12. T f=,c=;char ch=getchar();
  13. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  14. while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
  15. x = f*c;
  16. }
  17. struct cp
  18. {
  19. double x,y;
  20. cp(){}
  21. cp(double x,double y):x(x),y(y){}
  22. cp operator + (const cp &a)const{return cp(x+a.x,y+a.y);}
  23. cp operator - (const cp &a)const{return cp(x-a.x,y-a.y);}
  24. cp operator * (const cp &a)const{return cp(x*a.x-y*a.y,x*a.y+y*a.x);}
  25. };
  26. int to[N];
  27. void fft(cp *a,int len,int k)
  28. {
  29. for(int i=;i<len;i++)
  30. if(i<to[i])swap(a[i],a[to[i]]);
  31. for(int i=;i<len;i<<=)
  32. {
  33. cp w0(cos(Pi/i),k*sin(Pi/i));
  34. for(int j=;j<len;j+=(i<<))
  35. {
  36. cp w(,);
  37. for(int o=;o<i;o++,w=w*w0)
  38. {
  39. cp w1 = a[j+o],w2 = w*a[j+o+i];
  40. a[j+o] = w1+w2;
  41. a[j+o+i] = w1-w2;
  42. }
  43. }
  44. }
  45. if(k==-)
  46. for(int i=;i<len;i++)
  47. a[i].x=(ll)round(a[i].x/len+0.1);
  48. }
  49. int n,a[N],lim=,l;
  50. cp w1[N],w2[N],w3[N],w4[N],w5[N];
  51. int main()
  52. {
  53. // freopen("tt.in","r",stdin);
  54. read(n);
  55. for(int i=;i<=n;i++)
  56. {
  57. read(a[i]);
  58. a[i]+=;
  59. }
  60. while(lim<)lim<<=,l++;
  61. for(int i=;i<lim;i++)to[i]=((to[i>>]>>)|((i&)<<(l-)));
  62. for(int i=;i<=n;i++)
  63. {
  64. w1[a[i]].x++;
  65. w2[a[i]*].x++;
  66. w3[a[i]*].x++;
  67. }
  68. fft(w1,lim,),fft(w2,lim,);
  69. for(int i=;i<lim;i++)
  70. {
  71. w4[i] = w1[i]*w1[i]*w1[i];
  72. w5[i] = w1[i]*w2[i];
  73. }
  74. fft(w4,lim,-),fft(w5,lim,-);
  75. for(int i=;i<=;i++)
  76. {
  77. ll tmp = (ll)(w4[i].x-*w5[i].x+*w3[i].x+0.1)/;
  78. if(tmp)
  79. printf("%d : %lld\n",i-,tmp);
  80. }
  81. return ;
  82. }

spoj-TSUM Triple Sums的更多相关文章

  1. SPOJ TSUM Triple Sums(FFT + 容斥)

    题目 Source http://www.spoj.com/problems/TSUM/ Description You're given a sequence s of N distinct int ...

  2. spoj TSUM - Triple Sums fft+容斥

    题目链接 首先忽略 i < j < k这个条件.那么我们构造多项式$$A(x) = \sum_{1现在我们考虑容斥:1. $ (\sum_{}x)^3 = \sum_{}x^3 + 3\s ...

  3. SPOJ:Triple Sums(母函数+FFT)

    You're given a sequence s of N distinct integers.Consider all the possible sums of three integers fr ...

  4. Spoj 8372 Triple Sums

    题意:给你n个数字,对于任意s,s满足\(s=u_i+u_j+u_k,i<j<k\),要求出所有的s和对应满足条件的i,j,k的方案数 Solution: 构造一个函数:\(A(x)=\s ...

  5. 2018.11.18 spoj Triple Sums(容斥原理+fft)

    传送门 这次fftfftfft乱搞居然没有被卡常? 题目简述:给你nnn个数,每三个数ai,aj,ak(i<j<k)a_i,a_j,a_k(i<j<k)ai​,aj​,ak​( ...

  6. SPOJ Triple Sums(FFT+容斥原理)

    # include <cstdio> # include <cstring> # include <cstdlib> # include <iostream& ...

  7. SPOJ - Triple Sums

    [传送门] FFT第一题! 构造多项式 $A(x) = \sum x ^ {s_i}$. 不考虑题目中 $i < j < k$ 的条件,那么 $A^3(x)$ 每一项对应的系数就是答案了. ...

  8. SPOJ - TSUM 母函数+FFT+容斥

    题意:n个数,任取三个加起来,问每个可能的结果的方案数. 题解:构造母函数ABC,比如现在有 1 2 3 三个数.则 其中B表示同一个数加两次,C表示用三次.然后考虑去重. A^3表示可重复地拿三个. ...

  9. [SP8372-TSUM]Triple Sums

    题面在这里 description 某\(B\)姓\(OJ\)权限题 给出\(n\)个正整数\(a[i]\),求\(i<j<k\)且\(S=a[i]+a[j]+a[k]\)的三元组\((i ...

随机推荐

  1. Codeforces 550B 【暴力】

    题意: 有n个数字, 要求在这n个数中选出至少两个数字, 使得它们的和在L,R之间,并且最大的与最小的差值要不小于x 思路: 撒比了啊... 根据状态的话一共也就是2^15-直接暴力,二进制的小魅力还 ...

  2. lightoj 1125【01背包变性】

    题意: 从n个数里选出m个来,还要使得这m个数之和被d整除. 给一个n和q,再给n个数,再给q个询问,每个询问包含两个数,d,m; 对于每个case输出每个q个询问的可行的方案数. 思路: 每个数只能 ...

  3. Codeforces732F Tourist Reform

    求出无向图的所有边双联通分量,然后缩点就成了一颗树. 然后我们选取最大的那个边双联通分量作为根,这样我们就可以确定所有割边的方向了. 对于边双联通分量里面的边,我们随便dfs一下就可以把它变成强连通分 ...

  4. redis 发布订阅实现异步实时发短信

    redis 中发布和订阅可以实现消息的实时传输,这里我只是用它的事件驱动,当客户端发送了消息,服务器端立马可以接收指令处理相应的业务逻辑. 客户端 client.php <?php //发布 $ ...

  5. PKI体系下的 SSL TLS HTTPS 详解

    背景: SSL(Secure Socket Layer 安全套接层)是一个加密函数库,它可以将应用层上所有明文传输的数据,通过调用SSL库,即可摇身一变成为安全通信连接,SSL最初是由网景公司(Net ...

  6. hdu1272 小希的迷宫 基础并查集

    #include <iostream> #include <cstdlib> #include <cstdio> #include <algorithm> ...

  7. php.ini配置文件位置

    laravel之今天遇到个意想不到的问题: 我在测试文件上传,大于2M的文件时候hasFile() 方法报错,这一定是文件大小限制.接下来就跳坑了 1.首先查找php.ini的位置,就用find / ...

  8. bzoj 4456 [Zjoi2016]旅行者

    题面 https://www.lydsy.com/JudgeOnline/problem.php?id=4456 题解 分治 设当前work的区间为(x1,y1,x2,y2) 我们将长边分成两半 不妨 ...

  9. BZOJ4653(区间离散化+线段树+决策单调尺取)

    写得很好的题解 一眼过去很像是:排序,然后从前向后扫,有这个区间时插到树里,过去以后再删除.然后事实也是这样做的…… 具体起来: 1.如果考虑暴力的话,一种想法是枚举左端和右端要选取的区间(如果我们按 ...

  10. android draw9patch工具使用

    1.作用 将图片制作android .9图片xxx.9.png  xxx.9.jpg xxx.9.gif  这些图片在android上拉伸时,边角不变形,不影响效果. 2.工具位置 Android的S ...