题链:

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. Beta总结

    45°炸 031502601 蔡鸿杰 031502604 陈甘霖 031502632 伍晨薇 一.写在Beta项目前 Beta 凡 事 预 则 立 二.GitHub传送门 Beta冲刺重要版本 三.用 ...

  2. C语言总结报告

    1.当初你是如何做出选择计算机专业的决定的? 经过一个学期,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 当初报考计算机专业,是看到计算机专业在当今社会有良 ...

  3. Bate版敏捷冲刺每日报告--day1

    1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285)  Git链接:https://github.com/WHUSE2017/C-team 2 ...

  4. 团队作业7——第二次项目冲刺(Beta版本计划及安排)

     Beta版本冲刺       需要改进完善的功能 1.寻找BUG.并解决问题 2.界面的优化 下一阶段新增的功能' 1.个人信息头像上传 2.头像裁剪功能 需要改进的团队分工 1.之前产品的主要工作 ...

  5. iOS开发-OC分支结构

     BOOL类型 返回值:真:YES  假:NO BOOL数据类型占一个字节的内存空间,占位符为%d. 计算机在识别时,YES就替换成1,NO就替换成0. bool是C语言中的布尔类型,返回值为true ...

  6. appcompat v21: 让 Android 5.0 前的设备支持 Material Design

    1. 十大Material Design开源项目 2. appcompat v21: 让 Android 5.0 前的设备支持 Material Design 主题 AppCompat已经支持最新的调 ...

  7. Faster R-CNN 的 RPN 是啥子?

     Faster R-CNN,由两个模块组成: 第一个模块是深度全卷积网络 RPN,用于 region proposal; 第二个模块是Fast R-CNN检测器,它使用了RPN产生的region p ...

  8. Gson解析Json数组

    需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库 Json数据是这样的 { "result": { "heroes": [ { &quo ...

  9. LxmlLinkExtractor类参数解析

    LxmlLinkExtractor LxmlLinkExtractor 是一种强大的链接提取器,使用他能很方便的进行选项过滤,他是通过xml中强大的HTMLParser实现的 源代码如下: class ...

  10. java将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    首先我们的算法是:例如 输入的是 90 1.找到90的最小公约数(1除外)是 2 2.然后把公约数 2 输出 3.接着用 90 / 2 = 45 (如果这里是素数,就结束,否则继续找最小公约数) 4. ...