【题解】MUTC2013idiots
我是先知道的这题是FFT然后再做的,知道是FFT其实就是个套路题啦。首先,我们容易发现
\(P = \frac{a}{b}\) 其中a表示合法的方案数,而b表示全部的方案数。
b的值即为\(C\left ( n,3 \right )\)。如何求出合法的方案数呢?先考虑一下:如果我们锁定最大的边,那么合法的方案数就是所有两根木棍长度之和大于这根木棍的方案数。可是这个不好求啊。因为如果要统计方案数,那就一要保证这根木棍不出现在统计的方案中,而要保证方案中出现的两根木棍长度均<=这根木棍的长度,但这是不好做到的(等于是每一根木棍条件不同,复杂度根本无法保证)。
我们换一个角度:正难则反。不合法的方案数即为两根木棍之和<=这根木棍长度的方案数。这个是好求的,因为<=时,一定满足这根木棍是最长木棍&这根木棍与其他木棍组成的方案不会出现在其中。我们就可以用FFT快速求出卷积,算出两根木棍之和为x的方案数啦。
可是这题我找了很多程序对拍没有问题,但bzoj上过不去……呜呜呜……所以就不放代码惹。
……还是放一下吧,如果有哪位小可爱知道我的程序出了什么问题万分感谢呀……(;д;)
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
#define maxn 502000
#define int long long
#define db long double
const db Pi = acos(-1.0);
int T, n, L, S, LAST, len, ans, c[maxn];
int Rec[maxn], R[maxn], C[maxn];
int maxx; int read()
{
int x = ;
char c;
c = getchar();
while(c < '' || c > '') c = getchar();
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x;
} struct complex
{
db x, y;
complex (db xx = , db yy = ) { x = xx, y = yy; }
}g[maxn]; 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 opt)
{
for(int i = ; i < S; i ++)
if(i < R[i]) swap(A[i], A[R[i]]);
for(int mid = ; mid < S; mid <<= )
{
complex W(cos(Pi / mid), opt * sin(Pi / mid));
for(int r = mid << , j = ; j < S; j += r)
{
complex w(, );
for(int k = ; k < mid; k ++, w = w * W)
{
complex x = A[j + k], y = w * A[j + k + mid];
A[j + k] = x + y;
A[j + k + mid] = x - y;
}
}
}
} void init()
{
for(int i = ; i <= S; i ++)
g[i].x = g[i].y = ;
memset(Rec, , sizeof(Rec));
S = , maxx = , len = ans = ;
} void pre()
{
C[] = ;
for(int i = ; i < ; i ++)
C[i] = C[i - ] * i / (i - );
} signed main()
{
T = read();
pre();
while(T --)
{
init();
n = read();
for(int i = ; i <= n; i ++)
{
int x = read();
g[x].x += , Rec[x] += ;
maxx = max(x, maxx);
}
maxx *= ;
while(S <= maxx) S <<= , len ++;
for(int i = LAST; i < S; i ++)
R[i] = ((R[i >> ] >> ) | ((i & ) << (len - )));
LAST = max(LAST, S - );
FFT(g, );
for(int i = ; i < S; i ++) g[i] = g[i] * g[i];
FFT(g, -);
for(int i = ; i <= maxx; i ++) g[i].x /= S;
for(int i = ; i <= maxx; i ++)
{
int x = (int) (g[i].x + 0.5);
if(!(i % )) x -= Rec[i / ];
x /= ; g[i].x = x;
if(i != ) g[i].x += g[i - ].x;
}
for(int i = ; i <= maxx / ; i ++)
ans += ((int) g[i].x) * Rec[i];
printf("%.7Lf\n", (db) (C[n] - ans) / (db) C[n]);
}
return ;
}
【题解】MUTC2013idiots的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- jQuery(三)HTML
获得内容: text() - 设置或返回所选元素的文本内容 html() - 设置或返回所选元素的内容(包括 HTML 标记) val() - 设置或返回表单字段的值 <html> < ...
- python学习——基本数据类型
一.运算符 1.算术运算: 2.比较运算 3.赋值运算 4.逻辑运算 5.成员运算 二.基本数据类型 1.数字 1.1 整形数字和长整形数字:在32位机器上,整数的位数为32位,取值范围为-2**31 ...
- Test类实验
package PC_TEST; class CPU{ int speed; CPU(){ speed=0; } CPU(int k){ speed=k; } void setSpeed(int k) ...
- go执行外部应用
go执行外部应用 最近想将原来用asp.net mvc写的一个公司内部网站改用beego来写,但发现其中有一个功能是,能将加密的sqlite文件进行解密,因为这个解密是不能公开的,但有些同事需要查看这 ...
- POJ2739 Sum of Consecutive Prime Numbers 确定某个数以内的所有素数
参考:https://www.cnblogs.com/baozou/articles/4481191.html #include <iostream> #include <cstdi ...
- P1331 海战
P1331 海战 题目描述 在峰会期间,武装部队得处于高度戒备.警察将监视每一条大街,军队将保卫建筑物,领空将布满了F-2003飞机.此外,巡洋船只和舰队将被派去保护海岸线.不幸的是因为种种原因,国防 ...
- Linux中java应用程序的部署,使其开机自动启动
初步需求:将在Windows/MyEclipse中开发的java应用程序部署到Linux服务器上,使其运行 针对需求,可以参考下面这些文章,但是这些文章很多东西没有提及到,我自己尝试部署运行 在lin ...
- springmvc基础篇—掌握三种控制器
上一篇文章中我们讲过了处理器的映射,接下来我们来一起学习下springmvc的控制器吧. 首先咱们先创建一个咱们用来测试的实体(model)类: package cn.cfs.springmvc.do ...
- Asp.NET Core2.0与 EF的ABP框架入门视频教程
https://ke.qq.com/course/287301?from=qqchat&ADUIN=1187219916&ADSESSION=1522716499&ADTAG= ...
- MySQL高可用之PXC安装部署(续)
Preface Yesterday I implemented a three-nodes PXC,but there were some errors when proceeding ...