书(book)

题目描述
H a z e l Hazel Hazel n n n本书,编号为 1 1 1 n n n ,叠成一堆。当她每次抽出一本书的时候,上方的书会因重力而下落,这本被取出的书则会被放置在书堆顶。

每次有 p i p_{i} pi的概率抽取编号为 i i i的书。她每次抽书所消耗的体力与这本书在这堆中是第几本成正比。具体地,抽取堆顶的书所耗费体力值为 1 1 1 ,抽取第二本耗费体力值为 2 2 2 ,以此类推。

现在 想知道,在很久很久以后(可以认为几乎是无穷的),她每次抽书所耗费的体力的期望值是多少。

最终的答案显然可以表示成a/b的形式,请输出 a ∗ ( b − 1 ) % ( 1 0 9 + 7 ) a*(b^-1)\%(10^9+7) a(b1)%(109+7)的值。

【输入格式】

第一行一个整数 n n n

接下来 n n n行,每行两个整数 a i a_{i} ai b i b_{i} bi,代表抽取第i本书的概率是 a i b i \frac{a_{i}}{b_{i}} biai

保证所有书的概率和等于 1 1 1

【输出格式】

输出一行一个整数,代表期望值

【输入样例1】

2

227494 333333

105839 333333

【输出样例1】

432679642

【输入样例2】

10

159073 999999

1493 142857

3422 333333

4945 37037

2227 111111

196276 999999

190882 999999

142721 999999

34858 999999

101914 999999

【输出样例2】

871435606

【数据规模与约定】

对于 30 % 30\% 30%的数据, 1 ≤ n ≤ 10 1\leq n\leq10 1n10

对于 100 % 100\% 100%的数据, 1 ≤ n ≤ 1000 , 0 ≤ a i ≤ b i , b i 0 1\leq n\leq1000,0\leq a_{i}\leq b_{i},b_{i} 0 1n1000,0aibi,bi0

题解

我们令 p i = a i b i p_{i}=\frac{a_{i}}{b_{i}} pi=biai
对于一本书,考虑对于其它的书对这本书的影响是互不干涉的。
并且有一个式子:对于总期望,就是每一本书被选到的概率乘上拿走这本书的体力期望值。
由于概率已经给定,只考虑到最后的每本书的体力期望值。
我们考虑书 j j j i i i的影响。
设第 i i i本书取了 x x x次,第 j j j本书取了 y y y次。
那么由于无限次以后,满足 x y = p i p j \frac{x}{y} = \frac{p_{i}} {p_{j}} yx=pjpi
所以我们只需要关注最后一次取的时候, i i i j j j的位置关系。
所以,对于 i i i j j j,最后一次 j j j i i i的影响就是 p i p i + p j \frac{p_{i}}{p_{i}+p_{j}} pi+pjpi
累加即可。

#include<bits/stdc++.h>
using namespace std;
#define in inline
#define re register
#define rep(i,a,b) for(re int i=a;i<=b;i++)
#define repd(i,a,b) for(re int i=a;i>=b;i--)
#define For(i,a,b) for(re int i=a;i<b;i++)
#define Ford(i,a,b) for(re int i=a;i>b;i--)
#define _(d) while(d(isdigit(ch=getchar())))
template <class T> in void g(T &t) {T x,f=1;char ch;_(!)ch=='-'?f=-1:f;x=ch-48;_()x=x*10+ch-48;t=f*x;}
typedef long long ll;
const ll mod=1e9+7;const int N=1004; 
ll a[N],n,x,ans;
in ll qp(ll x,ll y){
	ll res=1;
	while(y){
		if(y&1) res=res*x%mod;
		x=x*x%mod;y>>=1;
	}return res%mod;
}
int main(){
	//freopen(".in","r",stdin);freopen(".out","w",stdout);
	g(n);
	rep(i,1,n){
		g(a[i]);g(x);x=qp(x,mod-2);
		a[i]=a[i]*x%mod;
	}
	rep(i,1,n){
		ll sum=1;
		rep(j,1,n){
			if(!(i^j)) continue;
			ll k=qp(a[i]+a[j],mod-2);
			sum=(sum+a[j]*k)%mod;
		}
		sum=sum*a[i]%mod;
		ans=(ans+sum)%mod;
	}
	printf("%lld\n",ans);
	
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
``` public class Library { private List<Book> books; public Library() { this.books = new ArrayList<>(); } public void addBook(Book b) { books.add(b); System.out.println("成功添加一本:" + b.getTitle()); } public void deleteByIsbn(String isbn) { for (Book b : books) { if (b.getIsbn().equals(isbn)) { books.remove(b); System.out.println("成功删除一本:" + b.getTitle()); return; } } System.out.println("找不到该ISBN号对应的籍"); } public void deleteByAuthor(String author) { int count = 0; Iterator<Book> it = books.iterator(); while (it.hasNext()) { Book b = it.next(); if (b.getAuthor().equals(author)) { it.remove(); count++; } } if (count == 0) { System.out.println("找不到该作者对应的籍"); } else { System.out.println("成功删除" + count + "本"); } } public void updateBook(Book b) { for (int i = 0; i < books.size(); i++) { if (books.get(i).getIsbn().equals(b.getIsbn())) { books.set(i, b); System.out.println("成功更新一本:" + b.getTitle()); return; } } System.out.println("找不到该ISBN号对应的籍"); } public int size() { return books.size(); } public void clear() { books.clear(); System.out.println("已清空所有图"); } public Book selectByIsbn(String isbn) { for (Book b : books) { if (b.getIsbn().equals(isbn)) { return b; } } System.out.println("找不到该ISBN号对应的籍"); return null; } public Book[] getAllBooks() { return books.toArray(new Book[books.size()]); } public static void main(String[] args) { Library library = new Library(); // 添加图 Book b1 = new Book("9787121332379", "Java编程思想", "Bruce Eckel"); Book b2 = new Book("9787111128069", "Java核心技术", "Cay S. Horstmann, Gary Cornell"); Book b3 = new Book("9787508353937", "八分钟演讲", "许倩"); library.addBook(b1); library.addBook(b2); library.addBook(b3); // 获取所有图 Book[] allBooks = library.getAllBooks(); for (Book b : allBooks) { System.out.println(b.getTitle()); } // 更新图信息 b2.setAuthor("Cay S. Horstmann, Gary Cornell, Alvin Alexander"); library.updateBook(b2); // 删除图(ISBN号) library.deleteByIsbn("1234567890"); library.deleteByIsbn("9787121332379"); // 删除图(作者) library.deleteByAuthor("abc"); library.deleteByAuthor("Cay S. Horstmann, Gary Cornell, Alvin Alexander"); // 清空所有图 library.clear(); // 统计的数量 System.out.println("图馆共有" + library.size() + "本"); // 查询图(ISBN号) Book b4 = library.selectByIsbn("1234567890"); if (b4 != null) { System.out.println("《" + b4.getTitle() + "》的作者是" + b4.getAuthor()); } // 查询图(不存在的ISBN号) library.selectByIsbn("1111111111"); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可爱の小公举

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值