摘要: 题意:Alice和Bob在玩一个游戏,该游戏需要n个杯子和一个石头,开始时石头被罩在在某个杯子里,Alice可交换任意两个杯子,经过一系列的交换,由Bob猜石头在哪个杯子里,交换总共m步,但Bob只看到了其中的k步,问Bob猜哪个杯子的可能性最大。第一感觉就是和组合(在n个数里取m个有多少种)很相似,再看题目因为顺序是一定的,即选了k步之后,顺序只有一种。c[n][m]=c[n-1][m-1]+c[n-1][m];具体编码的时候只考虑到交换的两个杯子而忘记其他杯子在选择时的值也要加上c[n-1][m-1];#include<cstdio>#include<cstring> 阅读全文
posted @ 2012-04-25 17:21 蚀 阅读(730) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个集合,有两种操作,插入一个数和查询集合中第i小的数,i每次查询一次前自增1,初始为0.一开始想先离散化,再用桶来表示这个集合,用树状数组维护查询,后来发现实现起来相当麻烦,而且思路也不够清晰。一看discuss居然有人用线段树做,简单多了,查询和插入都是O(logn);复杂度:O(nlogn);#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 30010using namespace std;struct ST{ int l,r,v;//v保存是的左子树有多少个数} 阅读全文
posted @ 2012-04-25 14:59 蚀 阅读(621) 评论(0) 推荐(0) 编辑