题目链接:hdu 4609 3-idiots

题意:

给你n条线段。问随机取三个,可以组成三角形的概率。

题解:

FFT搞,具体可看kuangbin菊苣的详细题解:传送门

 1 #include<bits/stdc++.h>
 2 #define F(i,a,b) for(int i=a;i<=b;++i)
 3 using namespace std;
 4
 5 const double pi=acos(-1.0);
 6 //n 必须为 2 的幂。
 7 struct comp{
 8     double r,i;
 9     comp(double _r=0,double _i=0){r=_r,i=_i;}
10     comp operator+(const comp x){return comp(r+x.r,i+x.i);}
11     comp operator-(const comp x){return comp(r-x.r,i-x.i);}
12     comp operator*(const comp x){return comp(r*x.r-i*x.i,r*x.i+i*x.r);}
13 };
14
15 void FFT(comp a[],int n,int t){
16     for(int i=1,j=0;i<n-1;i++)
17     {
18         for(int s=n;j^=s>>=1,~j&s;);
19         if(i<j)swap(a[i],a[j]);
20     }
21     for(int d=0;(1<<d)<n;d++)
22     {
23         int m=1<<d,m2=m<<1;
24         double o=pi/m*t;comp _w(cos(o),sin(o));
25         for(int i=0;i<n;i+=m2)
26         {
27             comp w(1,0);
28             for(int j=0;j<m;j++)
29             {
30                 comp &A=a[i+j+m],&B=a[i+j],t=w*A;
31                 A=B-t,B=B+t,w=w*_w;
32             }
33         }
34     }
35     if(t==-1)for(int i=0;i<n;i++)a[i].r/=n;
36 }
37
38 const int N=3e5+7;
39
40 comp x1[N],x2[N];
41
42 long long sum[N];
43 int a[N],num[N];
44
45 int main()
46 {
47     int t,n;
48     scanf("%d",&t);
49     while(t--)
50     {
51         memset(num,0,sizeof(num));
52         scanf("%d",&n);
53         F(i,0,n-1)scanf("%d",a+i);
54         sort(a,a+n);
55         F(i,0,n-1)num[a[i]]++;
56         int len=1,tmp=a[n-1]+1;
57         while(len<2*tmp)len<<=1;
58         F(i,0,len-1)
59         {
60             if(i<tmp)x1[i]=comp(num[i],0);
61             else x1[i]=comp(0,0);
62         }
63         FFT(x1,len,1);
64         F(i,0,len-1)x1[i]=x1[i]*x1[i];
65         FFT(x1,len,-1);
66         F(i,0,len-1)sum[i]=(long long)(x1[i].r+0.5);
67         len=2*a[n-1];
68         F(i,0,n-1)sum[a[i]+a[i]]--;
69         F(i,0,len)sum[i]>>=1;
70         F(i,1,len)sum[i]+=sum[i-1];
71         long long cnt=0;
72         F(i,0,n-1)
73         {
74             cnt+=sum[len]-sum[a[i]];
75             cnt-=1ll*(n-1-i)*i;
76             cnt-=(n-1);
77             cnt-=1ll*(n-1-i)*(n-i-2)/2;
78         }
79         printf("%.7f\n",(double)cnt/(1ll*n*(n-1)*(n-2)/6));
80     }
81     return 0;
82 }

View Code

转载于:https://www.cnblogs.com/bin-gege/p/6676451.html

hdu 4609 3-idiots(FFT计数)相关推荐

  1. HDU 4609 3-idiots(FFT)

    3-idiots 思路 多项式卷积的经典应用了: 看样例一: 4 1 3 3 4 我们用多项式系数表示得到一个与aia_iai​有关的多项式:010210\ 1\ 0\ 2\ 10 1 0 2 1, ...

  2. HDU 4609 3-idiots

    HDU - 4609 思路: 记录每个木棍长度出现的次数,然后就可以用用类似多项式的乘法(专业术语:卷积,因为是下标和为一特定值的积的和(x+y=k),相当于在笛卡尔坐标系中将这条直线卷起来,故得名卷 ...

  3. 快速傅里叶变换应用之二 hdu 4609 3-idiots

    快速傅里叶变化有不同的应用场景,hdu4609就比较有意思.题目要求是给n个线段,随机从中选取三个,组成三角形的概率. 初始实在没发现这个怎么和FFT联系起来,后来看了下别人的题解才突然想起来:组合计 ...

  4. bzoj 3513: [MUTC2013]idiots FFT

    bzoj 3513: [MUTC2013]idiots FFT 链接 bzoj 思路 参考了学姐TRTTG的题解 统计合法方案,最后除以总方案. 合法方案要不好统计,统计不合法方案. \(a+b< ...

  5. HDU 4609 3-idiots FFT

    3-idiots 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three m ...

  6. HDU 4609 FFT

    题目大意 给定n条边的边值,求任意取三条边能组成三角形的概率 这里概率 P = valid/tot tot = (n-2)*(n-1)*n/6是没问题的 valid表示合法的方式 先考虑,任意两条边组 ...

  7. 3-idiots HDU - 4609 FFT模板

    给N个木棍问任选三个可组合出三角形的概率 以前写的,整理整理存个档 //#pragma comment(linker, "/STACK:1024000000,1024000000" ...

  8. HDU 4609 3idiots

    第一道FFT,研究了kuangbin神的版子,发现想不太通,不过基本的意思都懂了,就是用一个数组的权和另一个数组的权求和,计算个数.题目中有不少坑点. #include <cstdio> ...

  9. HDU - 6975 Forgiving Matching FFT匹配字符串

    传送门 文章目录 题意: 思路: 题意: 给你两个串a,ba,ba,b长度分别为n,mn,mn,m,你需要输出m+1m+1m+1个数,第iii个数表示当允许有i−1i-1i−1个数可以不匹配时aaa中 ...

最新文章

  1. 富国银行是如何为公有云转型做准备的
  2. MySQL存储过程---动态的表名
  3. Vue 2.5中将迎来有关TypeScript的改进!
  4. WordPress ProPlayer插件‘id’参数SQL注入漏洞
  5. IT大佬整理的Python机器学习十大算法案例
  6. asp.net mvc中用 log4net记录日志到数据库中
  7. swift4.2 - 一个自定义view弹框
  8. 关于ngx_trylock_accept_mutex的一些解释
  9. OpenGL:使用FBO为渲染对象并从GPU取出存图
  10. asp.net mvc 如何在View中获取Url参数的值
  11. 【Sikuli】Sikuli 文档
  12. PowerDesigner 把Comment写到name中 和把name写到Comment中 pd7以后版本可用
  13. 有问有答 | 精华问题汇总
  14. 批处理写的关机小程序--bat
  15. total commander按文件夹大小显示
  16. keepalived 二
  17. 【基金量化研究系列】大类资产配置研究(三)——多资产均衡配置策略
  18. 学生专用计算机怎么打,电脑使用word快速打出学生座位表的方法
  19. ISV 和SI 是什么
  20. 正则表达式校验邮箱号、手机号、身份证号码等等

热门文章

  1. python类似turtle的库_Python库——turtle
  2. 超大背包问题(二进制枚举 + 二分)
  3. Mysql控制流语句
  4. 我与我的CSDN博客的第一天
  5. JdbcTemplate 的使用
  6. 也来谈一谈js的浅复制和深复制
  7. 简单的redis使用watch完成秒杀抢购功能
  8. 高并发系统数据幂等性
  9. ios 对日期的处理(包括计算昨天时间、明天时间)
  10. RG-AP220-E