题链:

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. Alpha冲刺集合

    Alpha冲刺集合 Day1 http://www.cnblogs.com/bugLoser/p/7901016.html Day2 http://www.cnblogs.com/bugLoser/p ...

  2. 结对开发五--对一千个数long型的一维数组求最大子数组的和

    一.设计思想 我们根据第一个实验,再让他自动生成1000个随机long型数.大致思想和实验一一样,自己已埋入炸弹. 二.实验代码 package com.minirisoft; import java ...

  3. 20162328蔡文琛week04

    学号 20162328 <程序设计与数据结构>第4周学习总结 教材学习内容总结 本周学习了第四章和第七章,第四章中的内容已经有了初步定的掌握,布尔表达式的运用,是条件和循环语句的基础及数组 ...

  4. Java中的Integer

    包装类---Integer Integer 类在对象中包装了一个基本类型int的值.Integer类型的对象包含一个 int 类型的字段.此外,该类提供了多个方法,能在 int 类型和 String ...

  5. Django Haystack 全文检索与关键词高亮

    Django Haystack 简介 django-haystack 是一个专门提供搜索功能的 django 第三方应用,它支持 Solr.Elasticsearch.Whoosh.Xapian 等多 ...

  6. [USACO4.1]麦香牛块Beef McNuggets

    https://www.luogu.org/problemnew/show/P2737 给出n个数ai,求这n个数不能累加出的最大的数 最大的数无限大或能凑出所有的自然数则输出0 n<=10,a ...

  7. 从PRISM开始学WPF(八)導航Navigation?

    0x6Navigation Basic Navigation Prism中的Navigation提供了一种类似导航的功能,他可以根据用户的输入,来刷新UI. 先看一个最简单的例子,通过按钮来导航到一个 ...

  8. 第1章 什么是TCP-IP

    第1章 什么是TCP-IP 什么是网络 网络是计算机或类似计算机的设备之间通过常用传输介质进行通信的集合.通常情况下,传输介质是绝缘的金属导线, 它用来在计算机之间携带电脉冲,介质也可以是电话线,甚至 ...

  9. 新概念英语(1-29)Come in, Amy.

    How must Amy clean the floor? A:Come in, Amy. Shut the door, please. This bedroom's very untidy. B:W ...

  10. centos6.5中rpm包安装mysql5.7(初始化出错如何解决)

    下载rpm包见:http://www.cnblogs.com/grey-wolf/p/7472680.html 1.rz上传到服务器,解压缩 rz [root@mini2 upload]# -.el6 ...