题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=1416
题解:

Pòlya瓦罐模型:
给定罐子里每种颜色的球的个数A[i],按题目要求随机操作若干次之后,摸到i号球的概率仍然为A[i]/sum(A[i])。

所以可以把题目看成若干次这种游戏,得出每次取球时的概率,然后更新对应的A[i]和sum(A[i])。
把每次的概率相乘即是答案。

要用到高精度,为了避免除法,可以先把分子分母质因数分解(最大质因子不超过20000),
把分子分母相同的因子相互抵消后,再用高精度乘起来。

代码:

#include<bits/stdc++.h>
#define BIT 10000
#define MAXN 1005
using namespace std;
struct Bigint{
int A[2*MAXN],len;
Bigint(){memset(A,0,sizeof(A)); len=1;}
void operator = (int rtm){
*this=Bigint();
do{
A[len++]=rtm%BIT; rtm/=BIT;
}while(rtm);
len--;
}
Bigint operator * (const Bigint &rtm) const{
static Bigint now; now=Bigint();
for(int i=1;i<=len;i++)
for(int j=1;j<=rtm.len;j++){
now.A[i+j-1]+=A[i]*rtm.A[j];
now.A[i+j]+=now.A[i+j-1]/BIT;
now.A[i+j-1]%=BIT;
}
now.len=len+rtm.len;
while(!now.A[now.len]) now.len--;
return now;
}
Bigint operator ^ (int b){
static Bigint now,base;
base=*this; now=1;
while(b){
if(b&1) now=now*base;
b>>=1; base=base*base;
}
return now;
}
void Print(){
printf("%d",A[len]);
for(int i=len-1;i;i--)
printf("%04d",A[i]);
}
};
int T,N,D,S,pnt;
int A[MAXN],prime[20005],cnt[2][20005];
void prework(){
static bool np[20005];
for(int i=2;i<=20000;i++) if(!np[i]){
prime[++pnt]=i;
for(int j=i*i;j<=20;j+=i) np[j]=1;
}
}
void Decomposition(int k,int val){
static int mincnt;
if(val&&cnt[k][0]!=0) cnt[k][0]=1;
else return (void)(cnt[k][0]=0);
for(int i=1;i<=pnt&&val!=1;i++){
while(val%prime[i]==0)
cnt[k][i]++,val/=prime[i];
mincnt=min(cnt[k][i],cnt[k^1][i]);
cnt[k][i]-=mincnt; cnt[k^1][i]-=mincnt;
}
}
Bigint combination(int k){
Bigint ret,tmp; ret=cnt[k][0];
for(int i=0;i<=pnt;i++) if(cnt[k][i]){
tmp=prime[i];
tmp=tmp^cnt[k][i];
ret=ret*tmp;
}
return ret;
}
int main(){
prework(); prime[0]=1;
cnt[0][0]=cnt[1][0]=-1;
scanf("%d%d%d",&T,&N,&D);
for(int i=1;i<=T;i++)
scanf("%d",&A[i]),S+=A[i];
for(int i=1,x,y;i<=N;i++){
scanf("%d%d",&x,&y);
Decomposition(0,A[y]);
Decomposition(1,S);
A[y]+=D; S+=D;
}
Bigint a=combination(0);
Bigint b=combination(1);
if(!cnt[0][0]) b=1;
a.Print(); putchar('/');
b.Print(); putchar('\n');
return 0;
}

  

●BZOJ 1416 [NOI2006]神奇的口袋的更多相关文章

  1. BZOJ 1416: [NOI2006]神奇的口袋( 高精度 )

    把x1~xn当成是1~n, 答案是不会变的. 然后直接模拟就行了...... P.S 双倍经验... BZOJ1416 && BZOJ1498 -------------------- ...

  2. Bzoj1498&1416: [NOI2006]神奇的口袋

    什么鬼双倍经验题??? Sol 考虑在第\(k\)次摸到\(y\)的概率 如果上次摸到\(y\),目前有\(sum\)个球,\(y\)有\(a[y]\)个,那么概率就是\(\frac{a[y]+d}{ ...

  3. 【BZOJ1416/1498】【NOI2006】神奇的口袋(数论,概率)

    [BZOJ1416/1498][NOI2006]神奇的口袋(数论,概率) 题面 BZOJ1416 BZOJ1498 洛谷 题面都是图片形式是什么鬼.. 题解 考虑以下性质 1.\(x[1],x[2]. ...

  4. BZOJ 1006 [HNOI2008] 神奇的国度(简单弦图的染色)

    题目大意 K 国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即 AB 相互认识,BC 相互认识,CA 相互认识,是简洁高效的.为了巩固三角关系,K 国禁止四边关系,五边关系等 ...

  5. 神奇的口袋(dp)

    有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40. John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2……an.John可 ...

  6. [codeup] 2044 神奇的口袋

    题目描述 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个想要得到的物品,每个物品的体积分别是a1,a2--an.John可以从这些物品中选 ...

  7. dp 神奇的口袋

    有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40.  John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2--an.Joh ...

  8. 九度OJ 1114:神奇的口袋 (DFS、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:948 解决:554 题目描述: 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个 ...

  9. 九度oj 题目1114:神奇的口袋

    题目描述: 有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40.John现在有n个想要得到的物品,每个物品的体积分别是a1,a2……an.John可以从这些物品中 ...

随机推荐

  1. 201621123062《java程序设计》第三周作业总结

    1.本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用 将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1写出你认为本周学 ...

  2. 《高级软件测试》云平台Jira的配置

    首先点击进入以下网址: https://www.atlassian.com/ondemand/signup/form?product=jira-software.ondemand 填写好信息,Star ...

  3. Project facet is Java version 1.7 is not spported

    在移植eclipse项目时,如果遇到 "Project facet Java version 1.7 is not supported." 项目中的jdk1.7不支持.说明项目是其 ...

  4. 使用freemaker 导出word 含多张图片,若无图片则显示文本信息

    1.使用的Microsoft Office 2007,添加一个无边框的表格,并插入一张图片,最后另存为编码utf-8,一开始保存的word xml格式的,图片的base64编码位于文档最后,暂时没有找 ...

  5. java程序员最不愿意看到的十件事

     0.遍历结果集并构造对象如果你是个时髦的开发者而不是专业人员,显然你从某篇博客中读过有开发者遇到Hibernate的“性能问题”,因而认为ORM都不好,觉得手动编码“明显更好”.喜欢的话你当然可以用 ...

  6. 开发一个http代理服务器

    参考链接: http://www.cnblogs.com/jivi/archive/2013/03/10/2952860.html https://www.2cto.com/kf/201405/297 ...

  7. s遇到错误不要慌,教你方法走四方

    我觉得不管是新手还是老手,他们都会出错,有些错误控制台会报错,而有些错误控制台不会报错 面对不会报错的时候,就有一些人烦恼,不知道怎么办了,久而久之,就失去了对学习的乐趣. 所以我在这里说一下对错误处 ...

  8. apache修改最大连接数报错

    报错的内容: AH00180: WARNING: MaxRequestWorkers of 2500 exceeds ServerLimit value of 256 servers, decreas ...

  9. find文件查找

    一.locate locate基于数据库索引来查找文件,数据库在开机时一段时间对更新,不会实时更新,数据库存放在(/var/lib/mlocate/mlocate.db),可以用updatedb来手动 ...

  10. hdu-1237 简单计算器---中缀表达式转后缀表达式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意: 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 思路 ...