我是先知道的这题是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的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. vue服务端渲染按需引入mint

    vue服务器渲染按需引入mint-ui 1.修改.babelrc文件,在.babelrc文件中plugins数组中添加 { "presets": [["es2015&qu ...

  2. Lavavel5.5源代码 - 并发数控制

    app('redis')->connection('default')->funnel('key000') // 每个资源最大锁定10秒自动过期,只有60个资源(并发),在3秒内获取不到锁 ...

  3. Phpstrom开发工具

    下载地址 https://www.jetbrains.com/zh/phpstorm/specials/phpstorm/phpstorm.html?utm_source=baidu&utm_ ...

  4. TP3.2.3 接入阿里sms 短信接口

    阿里云短信接口 配置文件 config.php //阿里大鱼 'Ali_SMS' =>array( 'sms_temp' =>'短信模板', 'sms_sign' =>'签名', ' ...

  5. hive 学习系列四(用户自定义函数)

    如果入参是简单的数据类型,直接继承UDF,实现一个或者多个evaluate 方法. 具体流程如下: 1,实现大写字符转换成小写字符的UDF package com.example.hive.udf; ...

  6. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  7. 工作中使用的linux命令汇总

    ln -s  /usr/local/tomcat/ ./tomcat   创建软连接到/usr/local/tomcat tar -zxvf apache-kylin-2.4.0-bin-hbase1 ...

  8. python第一个程序-->hello world

    最近在网上看到一个小笑话,一个程序员的自我嘲讽:“我精通所以计算机语言的hello world!” 好了,废话不多说了,开始撸代码: 我本人用的是python3.6版本,各位可以通过官网下载自己喜欢的 ...

  9. 使用apache的ab压力测试时失败请求原因

    只要出现 Failed requests 就会多出现一行要求失败的各原因的数据统计,分别有 Connect, Length,与 Exception 三种,分别代表的意义为:Connect      无 ...

  10. 浅谈 kubernetes service 那些事 (下篇)

    欢迎访问网易云社区,了解更多网易技术产品运营经验. 五.K8s 1.8 新特性--ipvs ipvs与iptables的性能差异 随着服务的数量增长,IPTables 规则则会成倍增长,这样带来的问题 ...