题解 Hunter
一看这题subtasks就觉得最后能直接推个柿子出来……然而没推出来
首先状压的部分分:发现只需要统计猎人1还没死的状态的贡献,其它情况可以continue掉,有45pts
至于正解……发现我们要求的实际上就是期望有多少个猎人死在猎人1之前
发现每个猎人的死活之间相互独立,所以可以拆成每个猎人死在猎人1之前都能造成1贡献
考虑对于一对猎人 \(i,j\) , \(i\) 死在 \(j\) 前面的概率是多少
分情况讨论:
- 两人都活着:是 \(\frac{w[i]}{w[i]+w[j]}\)
- 有一人活着:发现是情况1的附属状态,不贡献概率
- 都死了:同上不贡献概率
所以…… \(i\) 死在 \(j\) 前面的概率就是一个 \(\frac{w[i]}{w[i]+w[j]}\) ,没了
至于贡献……把所有概率加和就行了
神仙题……
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 100010
#define ll long long
#define reg register int
//#define int long long
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (c=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
int n;
const ll mod=998244353;
inline void md(ll& a, ll b) {a+=b; a=a>=mod?a-mod:a;}
ll w[N];
ll qpow(ll a, ll b) {
ll ans=1;
while (b) {
if (b&1) ans=ans*a%mod;
a=a*a%mod; b>>=1;
}
return ans;
}
namespace force{
ll ans, p[1<<21];
void solve() {
int lim=1<<n;
ll sum, p2, tem;
p[0]=1;
for (reg s=0,cnt; s<lim; ++s) {
if (s&1) continue;
sum=0; cnt=1;
for (reg i=0; i<n; ++i)
if (!(s&(1<<i))) md(sum, w[i+1]);
else ++cnt;
p2=qpow(sum, mod-2);
//cout<<"s: "<<bitset<5>(s)<<endl;
//cout<<p[s]<<' '<<w[1]<<' '<<p2<<endl;
tem=p[s]*p2%mod;
if (!(s&1)) md(ans, tem*cnt*w[1]%mod); //, cout<<"ans: "<<ans<<endl;
for (reg i=0; i<n; ++i) if (!(s&(1<<i))) {
md(p[s|(1<<i)], tem*w[i+1]%mod);
//cout<<p[s]*w[i+1]%mod*p2%mod<<endl;
}
}
printf("%lld\n", ans);
exit(0);
}
}
namespace task{
void solve() {
ll ans=0;
for (int i=2; i<=n; ++i) ans=(ans+w[i]*qpow((w[1]+w[i])%mod, mod-2)%mod)%mod;
printf("%lld\n", ans+1);
exit(0);
}
}
signed main()
{
n=read();
for (int i=1; i<=n; ++i) w[i]=read();
task::solve();
return 0;
}
题解 Hunter的更多相关文章
- hdu 4568 Hunter 最短路+dp
Hunter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- HDU 4568 Hunter 最短路+TSP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4568 Hunter Time Limit: 2000/1000 MS (Java/Others)Me ...
- HDU暑假多校第三场H.Monster Hunter
一.题意 给定一个树状地图,每个树节点上有一只怪物,打死一只怪物的过程中将会消耗A点HP,打死之后将会获得B点HP.因为树状结构,所以每只怪物必须先打死父节点的怪兽之后在打死子节点的怪物.现在,给定每 ...
- Day3-A-Problem H. Monster Hunter HDU6326
Little Q is fighting against scary monsters in the game ``Monster Hunter''. The battlefield consists ...
- 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]
无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...
- “.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter
“.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开,在Scott Hunter的30分钟的 Keynote上没有特别的亮点,所讲内容都是 微软“.Net社 ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
随机推荐
- NOIP模拟赛T3 斐波那契
1.题目 求 \[\sum_{i=1}^n \sum_{j=1}^m \gcd(F_i,F_j) \] 其中 \(F_k\) 表示斐波那契数列的第 \(k\) 项,对 \(10^9 + 7\) 取模. ...
- C语言:外部函数
//main.c #include <stdio.h> extern void func(); extern int m; int n = 200; int main(){ func(); ...
- C语言:printf标志符
%d 十进制整数 %i %lf双精度浮点数 %o八进制整数 0%o或0%O %x十六进制整数 0x%x 或 0X%X %f单精度浮点数 %E %e科学计数法 %s 字符串 %c 字符(单个 ...
- WIN7 32运行提示无法定位api-ms-win-crt-heap-l1-1-0.dll解决方法
WIN7 32位无法运行adbapi-ms-win-crt-heap-l1-1-0.dll运行ADB ,提示无法定位api-ms-win-crt-heap-l1-1-0.dll需要安装https:// ...
- 团队nabcd(校园大事件)
我们团队项目名称是TD校园通,作为辅助功能校园大事件,一样是一个亮眼的功能. 我们的大事件功能主要解决了大家qq微信群聊过多,信息杂,很多时候错过了校园内的大事件,错失了好的活动的痛苦. 我们计划在主 ...
- python的setup.py文件及其常用命令
编写setup.py文件,获取帮助:python setup.py --help-commands [python] Standard commands: build ...
- SpringBoot | 3.1 配置数据源
目录 前言 1. 数据源的自动配置 2. *数据源自动配置源码分析 2.1 DataSourceAutoConfiguration:数据源自动配置类 2.2 JdbcTemplateAutoConfi ...
- CentOS 7安装Python3 笔记
当前系统为阿里云的CentOS7.3 64位操作系统. 为了能让后续安装的软件(django,uwsgi,nginx等)尽量减少出现bug的几率,先把可能的依赖包都安装上. 一.安装依赖包 yum - ...
- JDBC连接流程
ConectionFactory cf = new ConectionFactory();//创建数据库连接Connection con = cf.getConection();//打开水数据库的连接 ...
- 【排序+模拟】谁拿了最多奖学金 luogu-1051
题目描述 某校的惯例是在每学期的期末考试之后发放奖学金.发放的奖学金共有五种,获取的条件各自不同: 院士奖学金,每人$ 8000 $元,期末平均成绩高于\(80\)分(\(>80\)),并且在本 ...