BZOJ 3513 idiots
题目传送门
分析:
FFT一手统计两根棍子相加的方案
然后一个值2S可能会被同一根S自己乘自己得到
然后要减去
其次,A+B和B+A会被算成两种方案,所以还要除以2
然后不太好算合法的方案数,但是非法的很好算
直接减去小于S的所有方案数乘以长度为S的棍子数就好了。。
疯狂卡常2333
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm> #define maxn 500005 using namespace std; inline int getint()
{
int num=,flag=;char c;
while((c=getchar())<''||c>'')if(c=='-')flag=-;
while(c>=''&&c<='')num=num*+c-,c=getchar();
return num*flag;
} struct cp{
double a,b;
cp(){}
cp(double x,double y){a=x,b=y;}
friend cp operator +(cp x,cp y)
{return cp(x.a+y.a,x.b+y.b);}
friend cp operator -(cp x,cp y)
{return cp(x.a-y.a,x.b-y.b);}
friend cp operator *(cp x,cp y)
{return cp(x.a*y.a-x.b*y.b,x.a*y.b+x.b*y.a);}
}; const double pi=acos(-1.0);
int k=,bit;
cp a[maxn],b[maxn];
int rev[maxn];
long long num1[maxn],num2[maxn]; inline void fft(cp *a,int inv)
{
for(int i=;i<k;i++)if(i<rev[i])swap(a[i],a[rev[i]]);
for(int mid=;mid<k;mid<<=)
{
cp tmp(cos(pi/mid),inv*sin(pi/mid));
for(int i=;i<k;i+=mid*)
{
cp ret(,);
for(int j=;j<mid;j++,ret=ret*tmp)
{
cp x=a[i+j],y=ret*a[i+j+mid];
a[i+j]=x+y,a[i+j+mid]=x-y;
}
}
}
} int main()
{
int T=getint();
while(T--)
{
memset(a,,sizeof a);
int mx=;
long long n=getint();k=,bit=;
for(int i=;i<n;i++)
{
int x=getint();mx=max(mx,x);
a[x].a++;
}
while(k<(mx+)*-)k<<=;
while((<<bit)<k)bit++;
for(int i=;i<k;i++)rev[i]=(rev[i>>]>>)|((i&)<<(bit-));
for(int i=;i<k;i++)b[i]=a[i];
fft(a,);
for(int i=;i<k;i++)a[i]=a[i]*a[i];
fft(a,-);
for(int i=;i<k;i++)
{
num1[i]=(long long)(b[i].a+0.5),
num2[i]=(long long)(a[i].a/k+0.5);
if(!(i&))num2[i]-=num1[i>>];
num2[i]>>=;
}
long long ans=(1ll*n*(n-)*(n-))/;
for(int i=;i<=mx;i++)num2[i]+=num2[i-],ans-=num2[i]*num1[i];
printf("%.7lf\n",1.0*ans*/(n*(n-)*(n-)));
}
}
BZOJ 3513 idiots的更多相关文章
- bzoj 3513: [MUTC2013]idiots FFT
bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...
- BZOJ 3513: [MUTC2013]idiots
3513: [MUTC2013]idiots Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 476 Solved: 162[Submit][Stat ...
- bzoj 3513 [MUTC2013]idiots FFT 生成函数
[MUTC2013]idiots Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 806 Solved: 265[Submit][Status][Di ...
- 【刷题】BZOJ 3513 [MUTC2013]idiots
Description 给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率. Input 第一行T(T<=100),表示数据组数. 接下来若干行描述T组数据,每组数据第一行是 ...
- bzoj 3513: [MUTC2013]idiots【生成函数+FFT】
想了好长时间最后发现真是石乐志 第一反应就是两边之和大于第三边,但是这个东西必须要满足三次-- 任意的两边之和合通过生成函数套路+FFT求出来(记得去掉重复选取的),然后这任意两边之和大于任意第三边可 ...
- Fast Fourier Transform
写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 挖个大坑,以后再补.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34 ...
- bzoj千题计划168:bzoj3513: [MUTC2013]idiots
http://www.lydsy.com/JudgeOnline/problem.php?id=3513 组成三角形的条件:a+b>c 其中,a<c,b<c 若已知 两条线段之和=i ...
- 【BZOJ】【2132】圈地计划
网络流/最小割 Orz Hzwer 这类大概是最小割建模中的经典应用吧…… 黑白染色,然后反转黑色的技巧感觉很巧妙!这个转化太神奇了…… /****************************** ...
- 【BZOJ 2132】圈地计划 && 【7.22Test】计划
两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...
随机推荐
- ZR普转提2
ZR普转提2 A 谢谢刁神教我A题 刚开始读错题了,以为是一个不可做的数位DP,然后就暴力滚粗 直到问了问刁神,发现自己题意是错的 然后成了比较简单的题目 直接暴力枚举每一位填什么,剩下的位数的数字都 ...
- koa2--07.cookies的设置和使用
cookies本身在koa中即可直接设置和使用,不需要在安装中间件 //cookies的使用 const koa = require('koa'); var router = require('koa ...
- 从头学pytorch(六):权重衰减
深度学习中常常会存在过拟合现象,比如当训练数据过少时,训练得到的模型很可能在训练集上表现非常好,但是在测试集上表现不好. 应对过拟合,可以通过数据增强,增大训练集数量.我们这里先不介绍数据增强,先从模 ...
- Mybatis入门案例中设计模式的简单分析
Talk is cheap, show me the code! public class TestMybatis { public static void main(String[] args) t ...
- DOCKER学习_003:Docker的存储
一 简介 docker提供数据卷来实现数据共享与持久化,而数据卷的挂载有两种方式: 挂载主机目录(Bind mounts) 数据卷容器(Data Volumes) 数据卷是一个可供容器使用的特殊目录, ...
- tomcat日志传参乱码问题
问题: 在centos系统下,tomcat8.0.36控制台日志打印会出现中文乱码. 解决方案: 在catalina.sh里加上 JAVA_OPTS="-Dfile.en ...
- redis集群数据迁移
redis集群数据备份迁移方案 n 迁移环境描述及分析 当前我们面临的数据迁移环境是:集群->集群. 源集群: 源集群为6节点,3主3备 主 备 192.168.112.33:8001 192 ...
- 洛谷$P2053\ [SCOI2007]$修车 网络流
正解:网络流 解题报告: 传送门$QwQ$ 一个很妙的建图,,,说实话我麻油想到$QwQ$ 考虑对每个工人建$n$个点,表示这是他修的倒数第$i$辆车,就可以算出影响是$t\cdot i$,然后对每辆 ...
- Redo与Undo的理解
本文概要本文的原意是一篇个人学习笔记,为了避免成为草草记录一下的流水账,尝试从给人介绍的角度开写.但在整理的过程中,越来越感觉力不从心,一是细节太多了,原以为足够了解的一个小知识点下可能隐藏了很多细节 ...
- linux(raspbian)下mysql的安装,权限设置和用户管理
一 MySQL安装:(1) 使用apt-get安装, 由于raspbian是基于Debian的自由操作系统,debian默认自带apt-get指令安装应用因此可以使用来安装 sudo apt-get ...