【GDOI2018模拟7.7】寻找天哥
来源:互联网 发布:国产cad软件哪款好用 编辑:程序博客网 时间:2024/05/18 05:04
Description
n<=3000
Solution
答案相当于求
也就是求
现在就是要找到一种方法求
发现这个东西等价于求
其中xi是一个在[0,1]范围内均匀分布的实数
设
那么答案就是
设
考虑新加入一个向量对这条式子的影响,设新加入的向量为(A’,B’,C’)
我们可以知道答案是由很多个形如这样的式子组成的
那么根据二项式定理我们可以知道从
这样子我们就只需要对每个向量计算出
显然
所以
那么就直接Dp转移就好了,复杂度O(n*常数)
Code
#include <cmath>#include <cstdio>#include <cstring>#include <algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;typedef double db;const int N=3*1e3+5;int CC[5][5],n;db alpha,beta,l,a[N],b[N],c[N],f[N][5][5][5],e[5][5][5],sa[5],sb[5],sc[5];int main() { freopen("tg.in","r",stdin); fo(i,0,4) { CC[i][0]=1; fo(j,1,i) CC[i][j]=CC[i-1][j-1]+CC[i-1][j]; } for(scanf("%d",&n);n;scanf("%d",&n)) { fo(i,1,n) { scanf("%lf%lf%lf",&alpha,&beta,&l); a[i]=l*cos(beta)*cos(alpha); b[i]=l*cos(beta)*sin(alpha); c[i]=l*sin(beta); } memset(f,0,sizeof(f)); f[0][0][0][0]=1; fo(x,1,n) { sa[0]=sb[0]=sc[0]=1; fo(i,1,4) { sa[i]=sa[i-1]*a[x]; sb[i]=sb[i-1]*b[x]; sc[i]=sc[i-1]*c[x]; } fo(i,0,4) fo(j,0,4) fo(k,0,4) e[i][j][k]=sa[i]*sb[j]*sc[k]/(i+j+k+1); fo(i,0,4) fo(j,0,4) fo(k,0,4) fo(A,0,i) fo(B,0,j) fo(C,0,k) f[x][i][j][k]+=f[x-1][i-A][j-B][k-C]*e[A][B][C]*CC[i][A]*CC[j][B]*CC[k][C]; } db ans=f[n][4][0][0]+f[n][0][4][0]+f[n][0][0][4]+2*(f[n][2][2][0]+f[n][2][0][2]+f[n][0][2][2]); ans=ans*M_PI/3.0; printf("%.6lf\n",ans); }}
阅读全文
0 0
- 【GDOI2018模拟7.7】寻找天哥
- 【GDOI2018模拟7.6】吃干饭
- 【GDOI2018模拟7.9】期末考试
- 【GDOI2018模拟7.8】质数
- 【GDOI2018模拟7.8】矩阵
- 【GDOI2018模拟7.10】B
- 【GDOI2018模拟7.10】C
- 【GDOI2018模拟7.10】B
- 【GDOI2018模拟7.10】C
- 【GDOI2018模拟7.12】B
- 【GDOI2018模拟7.12】C
- 【GDOI2018模拟7.12】A
- 【GDOI2018模拟7.10】C
- 【GDOI2018模拟8.11】质数
- 【GDOI2018模拟8.11】质数
- 【GDOI2018模拟8.11】决战
- 【GDOI2018模拟8.12】求和
- 【GDOI2018模拟8.12】求和
- C#_实现月度信息的快捷查询
- 位图索引
- spring需要添加哪些配置文件以及如何配置
- Ubuntu16.04完全离线安装mysql
- Python中文排序
- 【GDOI2018模拟7.7】寻找天哥
- 死锁原因排查
- 九大经典排序算法整理及其源代码分享(C/C++版)
- 正则表达式简介
- 腾讯云lnmp的安装
- 上传图片跟微信头像
- UVA 1583 打表 数论
- Android ViewDragHelper 使用详解
- Android系列之SQLite与Android Studio的数据交互