bzoj千题计划168:bzoj3513: [MUTC2013]idiots
http://www.lydsy.com/JudgeOnline/problem.php?id=3513
组成三角形的条件:a+b>c
其中,a<c,b<c
若已知
两条线段之和=i 的方案数g[i]
线段长度>i的 线段数量 t[i]
答案是否可以表示为 Σ g[i]*t[i] ?
不能,因为 有c是最大的数的限制
去掉c是最大数的限制:
不能组成三角形的条件:a+b<=c
其中,a<c,b<c
在这里,满足条件的c一定是abc中最大的
所以解题思路是 求出不能组成三角形的方案数S
g[i] 两条线段和为i的方案数
t[i] 线段长度>=i的 线段数
f[i] 线段长度=i的线段数
那么
g的计算:
g[i]= Σ f[j]*f[i-j]
若 i是偶数 g[i]-=f[i/2] (总长为i,方案数应该是f[i/2]*(f[i/2]-1),在式子中算的是f[i/2]*f[i/2])
g[i]/=2 (每个方案被枚举了两次)
S=Σg[i]*t[i]
tot=C(n,3)
ans=(tot-S)/ tot
用fft 把g的计算优化到 nlogn
多项式:g[]=f[]*f[]
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> using namespace std; const int N=<<; const double pi=acos(-); struct Complex
{
double x,y;
Complex() { }
Complex(double x_,double y_) : x(x_),y(y_) { }
Complex operator + (Complex P)
{
Complex C;
C.x=x+P.x;
C.y=y+P.y;
return C;
}
Complex operator - (Complex P)
{
Complex C;
C.x=x-P.x;
C.y=y-P.y;
return C;
}
Complex operator * (Complex P)
{
Complex C;
C.x=x*P.x-y*P.y;
C.y=x*P.y+y*P.x;
return C;
}
}; typedef Complex E; E f[N]; long long t[N],g[N]; int n; int r[N]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void fft(E *a,int tag)
{
for(int i=;i<n;++i)
if(i<r[i]) swap(a[i],a[r[i]]);
for(int i=;i<n;i<<=)
{
E wn(cos(pi/i),tag*sin(pi/i));
for(int p=i<<,j=;j<n;j+=p)
{
E w(,);
for(int k=;k<i;++k,w=w*wn)
{
E x=a[j+k],y=w*a[j+k+i];
a[j+k]=x+y; a[j+k+i]=x-y;
}
}
}
} int main()
{
int T;
read(T);
int a,mx;
long long ans,tot;
while(T--)
{
memset(t,,sizeof(t));
memset(g,,sizeof(g));
memset(f,,sizeof(f));
read(n);
tot=(long long)n*(n-)*(n-)/;
mx=;
for(int i=;i<=n;++i)
{
read(a);
t[a]++;
f[a].x++;
g[a<<]--;
mx=max(mx,a);
}
for(int i=mx-;i;--i) t[i]+=t[i+];
int m=mx-<<;
int bit=;
for(n=;n<=m;n<<=) bit++;
for(int i=;i<n;++i) r[i]=(r[i>>]>>)|((i&)<<bit-);
fft(f,);
for(int i=;i<n;++i) f[i]=f[i]*f[i];
fft(f,-);
for(int i=;i<n;++i) g[i]+=(int)(f[i].x/n+0.5);
ans=;
for(int i=;i<n;++i) ans+=(g[i]>>)*t[i];
ans=tot-ans;
printf("%.7lf\n",ans*1.0/tot);
}
}
3513: [MUTC2013]idiots
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 613 Solved: 219
[Submit][Status][Discuss]
Description
给定n个长度分别为a_i的木棒,问随机选择3个木棒能够拼成三角形的概率。
Input
Output
T行,每行一个整数,四舍五入保留7位小数。
Sample Input
4
1 3 3 4
4
2 3 3 4
Sample Output
1.0000000
HINT
T<=20
N<=100000
bzoj千题计划168:bzoj3513: [MUTC2013]idiots的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
随机推荐
- 网站favicon图标的显示问题
今天在微信开发者工具发现一个错误,说是找不到favicon.ico这个文件. 这个就是标签式浏览器显示在页面title前面的小图标,移动端也没什么用,所以一直没在意,今天有空就研究了一下,发现还是有点 ...
- JavaScript 运行机制详解
一.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...
- weblogic反序列化漏洞CVE-2018-2628-批量检测脚本
#coding=utf-8 import socket import time import re,os,sys,codecs type = 'utf-8' reload(sys) sys.setde ...
- 浅谈Observer在代码中表现形式
说到观察者模式,基本在软件工程领域中是应用广泛,不知道的可以先学习一番,下面给个快速的回顾,然后在通过一个grpc中的responseObserver谈下观察者对象在代码中的位置. 喜欢类图,就不上其 ...
- js设计模式(六)---组合模式
组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构.除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性.基本图例 1.组合模式 ...
- INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
INFO Dispatcher:42 - Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax ...
- SpringMVC访问静态资源的三种方式
如何你的DispatcherServlet拦截 *.do这样的URL,就不存在访问不到静态资源的问题.如果你的DispatcherServlet拦截“/”,拦截了所有的请求,同时对*.js,*.jpg ...
- 如何解决PuTTY中文乱码的问题
我们可以使用PuTTY这个工具在一台机器上对其它linux系统进行连接和操作.如果大家都在linux系统中,可以在终端中用ssh ip或主机名直接连接. 如果要在windows中对远程的linux系统 ...
- layui中的submit提交本地数据在控制在输出为空数组(解决)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ffmpeg命令的使用
参考博客:https://www.cnblogs.com/wainiwann/p/4128154.html 但是红色网页总结的 “ffmpeg 用法” 非常全面. http://www.360doc. ...