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)手中得到了一块开发土地.据了解,这块土 ...
随机推荐
- vue-learning:26 - component - 组件三大API之一:prop
组件三大API之一: prop prop的大小写 prop接收类型 字符串数组形式 对象形式: type / required / default / validator prop传递类型: 静态传递 ...
- Educational Codeforces Round 61
Educational Codeforces Round 61 今早刚刚说我适合打pikmike出的EDU 然后我就挂了 A 不管 B 不管 C 这道题到快结束了才调出来 大概就是\(n^2\)枚举不 ...
- Codeforces 293E 点分治+cdq
Codeforces 293E 传送门:https://codeforces.com/contest/293/problem/E 题意: 给你一颗边权一开始为0的树,然后给你n-1次操作,每次给边加上 ...
- Servlet 常用类
Servlet 是一套标准的接口规范,当用户通过web请求来访问服务器时,由web容器根据配置调用我们实现的对应的servlet对象来提供服务.同时为了方便开发,servlet标准中也提供了许多常用的 ...
- Android生命周期函数执行顺序
转载自:http://blog.csdn.net/intheair100/article/details/39061473 程序正常启动:onCreate()->onStart()->on ...
- hexo+github搭建博客(超级详细版,精细入微)
# 前言 你了解[Hexo]( https://hexo.io/zh-cn/ "Hexo官网")吗? Hexo是一个静态博客框架,基于Node.js,将Markdown文章通过渲染 ...
- JDK源码那些事儿之浅析Thread上篇
JAVA中多线程的操作对于初学者而言是比较难理解的,其实联想到底层操作系统时我们可能会稍微明白些,对于程序而言最终都是硬件上运行二进制指令,然而,这些又太过底层,今天来看一下JAVA中的线程,浅析JD ...
- saltstack的配置配置
一.为不同的环境设置不同的文件目录 1.1 修改配置文件 /etc/salt/master [root@node1 salt]# vim /etc/salt/master file_roots: ba ...
- 修改kubelet启动参数
我是用kubeadm安装的k8s,现在通过Aqua扫描出相关配置问题,需要修改kubelet的启动参数: 默认配置文件名为:10-kubeadm.conf #vim /usr/lib/systemd/ ...
- 开箱即用~基于.NET Core的统一应用逻辑分层框架设计
目前公司系统多个应用分层结构各不相同,给运维和未来的开发带来了巨大的成本,分层架构看似很简单,但保证整个研发中心都使用统一的分层架构就不容易了. 那么如何保证整个研发中心都使用统一的分层架构,以达到提 ...