bzoj 3513: [MUTC2013]idiots FFT

链接

bzoj

思路

参考了学姐TRTTG的题解
统计合法方案,最后除以总方案。
合法方案要不好统计,统计不合法方案。
\(a+b<=c\)的个数
f[i]是i出现的个数
g[i]表示a+b=i的个数,a<=b
这个可以fft加速到\(nlogn\)统计.
具体的,fft算出ff的卷积,减去自己自己的贡献,然后/2就是了g[i]。
不合法方案数就是:\(\sum f[i]*g[i]\)
最终答案是\(ans=\frac{C_n^3-tot}{C_n^3}\)

代码

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N=4e5+7;
const double Pi=acos(-1.0);
int read() {int x=0,f=1;char s=getchar();for(;s>'9'||s<'0';s=getchar()) if(s=='-') f=-1;for(;s>='0'&&s<='9';s=getchar()) x=x*10+s-'0';return x*f;
}
int n,m,r[N],limit=1,l;
struct Complex {double x,y;Complex(double xx=0,double yy=0) {x=xx,y=yy;}
}a[N],b[N];
Complex operator + (Complex a,Complex b) {return Complex(a.x+b.x,a.y+b.y);}
Complex operator - (Complex a,Complex b) {return Complex(a.x-b.x,a.y-b.y);}
Complex operator * (Complex a,Complex b) {return Complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void fft(Complex *a,int type) {for(int i=0;i<=limit;++i)if(i<r[i]) swap(a[i],a[r[i]]);for(int mid=1;mid<limit;mid<<=1) {Complex Wn(cos(Pi/mid),type*sin(Pi/mid));for(int i=0;i<limit;i+=mid<<1) {Complex w(1,0);for(int j=0;j<mid;++j,w=w*Wn) {Complex x=a[i+j],y=w*a[i+j+mid];a[i+j]=x+y;a[i+j+mid]=x-y;}}}
}
ll f[N],g[N],sum[N];
void solve() {memset(a,0,sizeof(a));memset(f,0,sizeof(f));n=read();for(int i=1;i<=n;++i) f[read()]++;for(int i=0;i<=limit;++i) a[i].x=f[i];fft(a,1);for(int i=0;i<=limit;++i) a[i]=a[i]*a[i];fft(a,-1);for(int i=0;i<=limit;++i)g[i]=(int)(a[i].x/limit+0.5);for(int i=0;i<=limit;++i) g[i*2]-=f[i];for(int i=0;i<=limit;++i) g[i]>>=1;for(int i=0;i<=limit;++i) g[i]+=g[i-1];ll tot=0;for(int i=0;i<=limit;++i) tot+=1LL*f[i]*g[i];ll ans=1LL*n*(n-1)*(n-2)/6;printf("%.7lf\n",(double)(ans-tot)/ans);
}
int main() {while(limit<=200000) limit<<=1,l++;for(int i=0;i<=limit;++i)r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));for(int T=read();T;T--) solve();return 0;
}

转载于:https://www.cnblogs.com/dsrdsr/p/10703957.html

bzoj 3513: [MUTC2013]idiots FFT相关推荐

  1. BZOJ 3513: [MUTC2013]idiots [FFT]

    统计每种长度的木棒数量,先计算出两根棒子能构成的长度,想到卷积.1.拿这个序列卷积自己 2.计算重算的部分,首先是一条边自己和自己的这种情况,另一种是(i,j)和(j,i)这种形式.第一种,可以枚举读 ...

  2. bzoj 3513: [MUTC2013]idiots【生成函数+FFT】

    想了好长时间最后发现真是石乐志 第一反应就是两边之和大于第三边,但是这个东西必须要满足三次-- 任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可 ...

  3. 解题报告(二)E、(BZOJ3513) [MUTC2013] idiots(生成函数 + FFT + 组合计数)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  4. 2019.01.02 bzoj3513: [MUTC2013]idiots(fft)

    传送门 fftfftfft经典题. 题意简述:给定nnn个长度分别为aia_iai​的木棒,问随机选择3个木棒能够拼成三角形的概率. 思路:考虑对于木棒构造出生成函数然后可以fftfftfft出两个木 ...

  5. BZOJ.3527.[ZJOI2014]力(FFT)

    题目链接 \(Descripiton\) 给出\(q[\ ]\),\[F[j]=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_ ...

  6. BZOJ 4827 [Hnoi2017]礼物 ——FFT

    题目上要求一个循环卷积的最小值,直接破环成链然后FFT就可以了. 然后考虑计算的式子,可以分成两个部分分开计算. 前半部分FFT,后半部分扫一遍. #include <map> #incl ...

  7. bzoj 4827 [Hnoi2017]礼物——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4827 式子就是 \sum_{i=0}^{n-1}(a[ i ] - b[ i+k ] + c ...

  8. bzoj 4624 农场种植 fft

    4624: 农场种植 Time Limit: 50 Sec  Memory Limit: 512 MB Submit: 48  Solved: 31 [Submit][Status][Discuss] ...

  9. bzoj 3527 [Zjoi2014]力——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...

最新文章

  1. [Android]上传到多个Maven仓库的Gradle插件RapidMavenPushPlugin
  2. 即时通讯音视频开发(一):视频编解码之理论概述
  3. 多序列比对要多久时间_上海注册公司要多久时间?
  4. bitnami如何使用_使用Bitnami获取完全配置的Apache Airflow Docker开发堆栈
  5. php运城,运城php培训
  6. 深入浅出InfoPath——动态获取InfoPath中的命名空间
  7. 计算机中整数加法满足结合律吗
  8. 上海市计算机一级客观题,2012年上海市高校计算机等级考试(一级)模拟卷客观题...
  9. 国际顶会加持,算法大赛等你共探技术新可能
  10. 人人都是 DBA(IV)SQL Server 内存管理 (转)
  11. Python 最好用的8个VS Code扩展
  12. 简单的 js 日历控件
  13. 计算机专业职业理想作文400字,我的理想作文400字(精选4篇)
  14. springboot jpa链接数据库
  15. Oracle 错误总结及问题解决 ORA
  16. 简述对linux系统的认识,对Linux的初步认识
  17. getInputStream() has already been called for this request
  18. 安卓自定义音量键_iPhone 为啥要一直保留“静音键”?
  19. Libra是一个纸老虎吗?Libra技术专业解析 | 技术帖
  20. SwitchResX 开启HiDPI时显示Not installed的解决办法

热门文章

  1. 人为什么总感觉莫名的心烦?
  2. 老人为什么要去依靠曾经不喜欢的子女去为她养老?
  3. 我有一箱01年的茅台酒现在值多少钱
  4. 从自媒体引流到私域池
  5. 品牌诞生于两个驱动力
  6. 相信很多人心里都有着一个自媒体的梦想
  7. 对创业者来说,创业心学就是一个不断提升自己
  8. 为什么以前的电视一打雷就容易烧坏,现在的电视就不那么怕雷?
  9. 每天更新bing首页图片为桌面壁纸
  10. make: 'pcs.o' is up to date.问题解决