这题一直re不造为啥。。后来yww大神把树状数组“倒过来”就过了,倒过来的好处是算sum(d[i]+1)就行,不涉及除法,不用求逆元。

题意:初始手牌颜值是0,一共抽卡n次,第i次抽卡有pi的概率能抽到颜值为di的卡,若di>当前手牌颜值,则替换,最后问改变手牌次数的期望。

做法:树状数组维护前缀概率积。先把di离散化,di作为下标,pi作为值,逆元用费马小定理那个推论,本质就是求每次改变手牌的概率,第i次就是pi(1-pj)(1-pk)...(其中j,k<i),即p[i]*sum(d[i]+1)。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<functional>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<bitset>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
typedef long double ldb;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
void open(const char *s){
#ifndef ONLINE_JUDGEchar str[100];sprintf(str,"%s.in",s);freopen(str,"r",stdin);sprintf(str,"%s.out",s);freopen(str,"w",stdout);
#endif
}
void open2(const char *s){
#ifdef DEBUGchar str[100];sprintf(str,"%s.in",s);freopen(str,"r",stdin);sprintf(str,"%s.out",s);freopen(str,"w",stdout);
#endif
}
template <class T>
int upmin(T &a, const T &b){return (b<a?a=b,1:0);}
template <class T>
int upmax(T &a, const T &b){return (b>a?a=b,1:0);}
namespace io
{const int SIZE=(1<<20)+1;char ibuf[SIZE],*iS,*iT;char obuf[SIZE],*oS=obuf,*oT=oS+SIZE-1;int getc(){(iS==iT?iS=ibuf,iT=ibuf+fread(ibuf,1,SIZE,stdin):0);return iS==iT?EOF:*(iS++);}int f;char c;template <class T>void get(T &x){f=1;for(c=getc();(c<'0'||c>'9')&&c!='-';c=getc());(c=='-'?f=-1,c=getc():0);x=0;for(;c>='0'&&c<='9';c=getc())x=x*10+c-'0';x*=f;}void flush(){fwrite(obuf,1,oS-obuf,stdout);oS=obuf;}void putc(char x){*(oS++)=x;if(oS==oT)flush();}int a[55],t;template <class T>void put(T x){if(!x)putc('0');x<0?putc('-'),x=-x:0;while(x){a[++t]=x%10;x/=10;}while(t)putc(a[t--]+'0');}void space(){putc(' ');}void enter(){putc('\n');}struct flusher{~flusher(){flush();}}io_flusher;
}
const int infi=0x3fffffff;
const ll infll=0x3fffffffffffffffll;
const int N=100010;
const ll p=1000000007;
ll fp(ll a,ll b)
{ll s=1;for(;b;b>>=1,a=a*a%p)if(b&1)s=s*a%p;return s;
}
const ll inv100=fp(100,p-2);
ll a[N],d[N];
int b[N],c[N];
int n,t;
void add(int x,ll v)
{for(;x;x-=x&-x)d[x]=d[x]*v%p;
}
ll sum(int x)
{ll res=1;for(;x<=t;x+=x&-x)res=res*d[x]%p;return res;
}
void solve()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld%d",&a[i],&b[i]);a[i]=a[i]*inv100%p;c[i]=b[i];}sort(c+1,c+n+1);t=unique(c+1,c+n+1)-c-1;for(int i=1;i<=n;i++)b[i]=lower_bound(c+1,c+t+1,b[i])-c;for(int i=1;i<=n;i++)d[i]=1;ll ans=0;for(int i=1;i<=n;i++){ans=(ans+a[i]*sum(b[i]+1))%p;add(b[i],1-a[i]);}ans=(ans%p+p)%p;printf("%lld\n",ans);
}
int main()
{int t;scanf("%d",&t);while(t--)solve();return 0;
}

转载于:https://www.cnblogs.com/wzgg/p/11581986.html

neuoj1472 yuki的氪金之旅(倒置树状数组相关推荐

  1. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  2. hdu4281 状态压缩dp(mtsp)+树状数组

    #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; const int maxn=17; /*这里参考大 ...

  3. 【转载】树状数组题目

    先提个注意点,由于Lowbit(0) = 0,这会导致x递增的那条路径发生死循环,所有当树状数组中可能出现0时,我们都全部加一,这样可以避免0带来的麻烦-- 简单:       POJ 2299 Ul ...

  4. 如此好的树状数组学习资料

    树状数组学习系列1 之 初步分析--czyuan原创 其实学树状数组说白了就是看那张图,那张树状数组和一般数组的关系的,看懂了基本就没问题了,推荐下面这个教程:http://www.topcoder. ...

  5. 树状数组(Binary Index Tree)

    树状数组(Binary Index Tree, BIT)是用用数组来模拟树形结构.最简单的树状数组支持两种操作,时间复杂度均为 O ( log ⁡ ⁡ n ) O(\log⁡ n) O(log⁡n): ...

  6. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  7. Color the ball(HDU1556)树状数组

    每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...

  8. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  9. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

最新文章

  1. neo4jd3的使用流程(转载)
  2. css img 适配尺寸_CSS容易使人蒙圈的几个经典问题
  3. linux下配置Java和Go环境
  4. 关于问题PageNotFound.noHandlerFound No mapping found for HTTP的解决
  5. 字符编码详解及由来(UNICODE,UTF-8,GBK)
  6. Android的系统架构
  7. 崩坏3区号+86_今天才知道手机号前的+86是这个意思
  8. JS === 实现多个光标跟随事件
  9. CPU中控制器的功能
  10. 【MATLAB】高维矩阵求和
  11. 代码评审的价值和规范
  12. qcom 音频相关的dsp driver笔记(基于msm8996平台)
  13. 度数换算_视力表、近视度数换算方法(实用珍藏版)
  14. 腾讯面试居然跟我扯了半小时的CountDownLatch
  15. 蚂蚁金服阳振坤:用10年时间打造一个“顶天立地”的产品
  16. 微信企业号用户验证php,企业号OAuth2.0验证企业用户接口
  17. Python 用Ursina 3D引擎做一个太阳系行星模拟器
  18. Python中的取模运算
  19. 水逆的京东,2019还能翻盘吗?
  20. 便携式电子血压计【Part I】

热门文章

  1. 嵊州D3T1 山魔 烙饼问题
  2. 「bitset」库下的便捷二进制转换
  3. 2021.11.14
  4. 单片机 -AD电压检测调试遇到的坑,请避让!
  5. Airtest+Poco多设备并发自动化游戏测试框架(遇到的问题)
  6. 彻底搞懂基于Open3D的点云处理教程!
  7. 计算机毕业设计ssm千益校园帮跑腿信息平台5e9ev系统+程序+源码+lw+远程部署
  8. 你怎样拼写计算机英语怎么说,你的名字是什么英文-“你的名字怎么拼写”用英语怎么说? – 手机爱问...
  9. U2-Net: Going Deeper with Nested U-Structure for Salient Object Detection|环境搭建|人物素描 测试 简记 |
  10. AI纪事|深度学习保护濒危语言