抽卡大赛

链接

分析:

  $O(n^4)$的做法比较好想,枚举第i个人选第j个,然后背包一下,求出有k个比他大的概率。

  优化:

  第i个人,选择一张卡片,第j个人选的卡片大于第i个人的概率是$p_j$,那么答案的生成函数是:

  $\prod \limits _{j = 1}^{n} [j != i]((1 - p_j) + p_jx)$

  那么可以将所有人选的卡片按A排序,每次移动,只有一个多项式发生改变,改变的只有一个人,每个人只有一个长度为2的多项式,乘和除都可以做到$O(n)$。

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cctype>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = , mod = 1e9 + , inv100 = ; struct Node { int A, G, P, id; } a[N * N];
bool operator < (const Node& x,const Node &y) { return x.A > y.A; }
int f[N], v[N], sump[N], ans[N], n; int ksm(int a,int b) {
int res = ;
while (b) {
if (b & ) res = 1ll * res * a % mod;
a = 1ll * a * a % mod;
b >>= ;
}
return res;
}
void Div(int p) {
int inv = ksm( - p, mod - );
f[] = 1ll * f[] * inv % mod;
for (int i = ; i < n; ++i) f[i] = 1ll * (f[i] - 1ll * p * f[i - ] % mod) * inv % mod;
}
void Mul(int p) {
for (int i = n - ; i >= ; --i)
f[i] = (1ll * f[i] * (mod + - p) % mod + 1ll * f[i - ] * p % mod) % mod;
}
int main() {
n = read();int cnt = ;
for (int i = ; i <= n; ++i) {
int m = read(), sum = ;
for (int j = ; j <= m; ++j) {
a[++cnt].id = i;
a[cnt].A = read(), a[cnt].G = read(), a[cnt].P = read(); sum += a[cnt].P;
a[cnt].G = 1ll * ( - a[cnt].G) * inv100 % mod;
}
for (int j = ; j < m; ++j)
a[cnt - j].P = 1ll * a[cnt - j].P * ksm(sum, mod - ) % mod;
}
for (int i = ; i < n; ++i) v[i] = read();
sort(a + , a + cnt + );
f[] = ;
for (int i = ; i <= cnt; ++i) {
if (a[i].id != a[i - ].id) {
Div(sump[a[i].id]);
Mul(sump[a[i - ].id]);
}
for (int j = ; j < n; ++j)
ans[a[i].id] = (ans[a[i].id] + 1ll * f[j] * v[j] % mod * a[i].P % mod * a[i].G) % mod;
sump[a[i].id] = (sump[a[i].id] + a[i].P) % mod;
}
for (int i = ; i <= n; ++i) printf("%d\n", (ans[i] + mod) % mod);
return ;
}

51nod 抽卡大赛的更多相关文章

  1. 51nod 1850 抽卡大赛 (十二省联考模测) DP

    O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...

  2. 十二省NOI“省选”联考模测(第二场)A抽卡大赛

    /* dp维护整体的概率, 每次相当于回退一格然后重新dp一格 */ #include<cstdio> #include<algorithm> #include<iost ...

  3. [51Nod1850] 抽卡大赛

    link $solution:$ 朴素 $dp$,暴力枚举选择 $i$ 号人的第 $j$ 张卡片,朴素 $dp$ 即可,时间复杂度 $O(n^4)$ . 考虑对于朴素 $dp$ 的优化,发现其实是一个 ...

  4. 三色抽卡游戏 博弈论nim

    你的对手太坏了!在每年的年度三色抽卡游戏锦标赛上,你的对手总是能打败你,他的秘诀是什么? 在每局三色抽卡游戏中,有n个卡组,每个卡组里所有卡片的颜色都相同,且颜色只会是红(R).绿(G).蓝(B)中的 ...

  5. [CSP-S模拟测试]:抽卡(概率DP)

    题目描述 水上由岐最近在肝手游,游戏里有一个氪金抽卡的活动.有$n$种卡,每种卡有 3 种颜色.每次抽卡可能什么也抽不到,也可能抽到一张卡.每氪金一次可以连抽 m 次卡,其中前$m−1$次抽到第$i$ ...

  6. Java实现 蓝桥杯 算法提高 抽卡游戏

    试题 算法提高 抽卡游戏 某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个"井"的机制,抽满k次卡后直接送这张限定卡.试求获得这张限定卡需要的期望抽卡次数.输入为一行,用空格隔开 ...

  7. [loj3315]抽卡

    令$S$表示对于某一种抽卡顺序中某一段长度为$k$的段全部被抽到的时间(这里没有期望)所构成的集合,根据$min-max$容斥的公式,有$E(\min(S))=\sum_{T\subseteq S}( ...

  8. 51nod 省选联测 R2

    51nod 省选联测 R2 上场的题我到现在一道都没A,等哪天改完了再写题解吧,现在直接写第二场的. 第二场比第一场简单很多(然而这并不妨碍我不会做). A.抽卡大赛:http://www.51nod ...

  9. C#入门经典第十章例题 - - 卡牌

    1.库 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

随机推荐

  1. 基于Jmeter和Testlink的自动化测试框架研究与实施

    关于测试框架搭建的详细过程,会在另一篇文章中详细介绍:http://www.cnblogs.com/leeboke/p/6145977.html 摘 要 目前基于Jmeter的接口自动化测试框架,大多 ...

  2. Centos7下crontab+shell脚本定期自动删除文件

    问题描述: 最近有个需求,就是rsync每次同步的数据量很多,但是需要保留的数据库bak文件 保留7天就够了,所以需要自动清理文件夹内的bak文件 解决方案: 利用shell脚本来定期删除文件夹内的任 ...

  3. 【Excel】SUMIF函数的兼容性

    兼容性非常强的两个函数 SUMIF() 说兼容性,当然得说SUMIF了. 来,我们先举个例子. 现有一个表格,算起来只有"科目划分"."发生额"两列内容,但是折 ...

  4. January 04th, 2018 Week 01st Thursday

    Just do what works for you, because there will always be someone who think differently. 就做你自己所能做的,因为 ...

  5. <20190106>千兆 小型局域网传输速率不达标问题解决

    故障描述: 三层交换机下挂了 个一层交换机, 全部交换终端包括路由器传输界面意确认全是千兆设备, 其中NAS端到 主机1 的传输速度只有100Mb, 观察主机1 的网络配置,确实连接速度是 100Mb ...

  6. JavaScript的运行机制

    先来看一段代码然后再来详细的说明js的运行机制,下面的一段代码执行顺序是什么 console.log(1); setTimeout(function () { console.log(2); }, 0 ...

  7. django知识点回顾(上)

    Django---知识点: 1. 配置文件: media: avatar = models.FileField(upload_to='avatar')#数据库里的model MEDIA_ROOT=os ...

  8. Android Studio IDE的 LogCat如何过滤指定应用的调试信息

    http://blog.csdn.net/wangqing830414/article/details/40377979 打开 LogCat在搜索框右侧的No Filters中选择 Edit Filt ...

  9. rowid快速分页解析

    版权声明:个人随笔,实用你就COPY,看不懂不解释 https://blog.csdn.net/HelloCqk1/article/details/36628787 --分页第一步 获取数据物理地址 ...

  10. 在linux系统下安装配置apacheserver

          我所用的是centos linux系统,但apache的服务在linux系统都大同小异.像ubuntu  redhat等等. now let us go!  如有问题, 欢迎直邮: zhe ...