【纪中集训2019.3.13】fft
题意:
描述
一共有\(n+m\)道题,其中\(n\)道答案是\(A\),\(m\)道答案是\(B\);
你事先知道\(n和m\),问在最优情况下的期望答错次数,对\(998244353\)取模;
范围
\(n,m \le 1e5\)
题解
- 考虑答对的期望次数;
- 显然最优策略是答个数多的那一个;
- 这样如果把状态写成一个 $n \times m $ 网格图,那么一个点的贡献 \({i,j}\) 就是 \(max(i,j)\) ;
- 考虑所有从\((0,0)\)走到\((n,m)\)的方案的和,答案就是
n + m - \frac{\sum_{i=0}^{n} \sum_{j=0}^{m} \frac{max(i,j)}{i+j}C_{i+j}^{i}C_{n-i+m-j}^{n-i} }{C_{n+m}^{n}} (i+j!=0)
\end{align}
\]
然后我就去特别死板的化式子。。。。。。,浪费了很多时间;
答案也确实是一个比较特别的式子 :
\[n - \frac{ \sum_{i=0}^{n} C^{i}_{2i}C^{n-i}_{n+m-2i} }{2C_{n+m}^{n}} (n<=m)
\]考虑实际意义,对于一个实际的路径,在\(i!=j\)的点一定是可以知道回答什么,所以一定不会错,即会答对\(max(n,m)\)次
而在\(i==j\)的点会随便回答一个,答对的次数是\(1/2\);
所以去掉一个\(max(n,m)\)之后只考虑所有\(i==j\)的点\(O(n)\)计算;
#include<bits/stdc++.h>
#define ll long long
#define mod 998244353
using namespace std;
const int N=1000010;
int n,m,fac[N],ifac[N],inv[N];
int cal(int x,int y){return (ll)fac[x+y]*ifac[x]%mod*ifac[y]%mod;}
int cal2(int x,int y){return (ll)fac[x]*fac[y]%mod*ifac[x+y]%mod;}
int main(){
freopen("fft.in","r",stdin);
freopen("fft.out","w",stdout);
scanf("%d%d",&n,&m);
fac[0]=ifac[0]=1;
for(int i=1;i<=n+m;++i){
if(i==1)inv[i]=1;else inv[i]=(ll)(mod-mod/i)*inv[mod%i]%mod;
fac[i]=(ll)fac[i-1]*i%mod;
ifac[i]=(ll)ifac[i-1]*inv[i]%mod;
}
int ans=0;
/*
for(int i=0;i<=n;++i)
for(int j=0;j<=m;++j)if(i==j)*/
for(int i=1;i<=n&&i<=m;++i){
int j=i;
ans = (ans + (ll)max(i,j) * inv[i+j] %mod * cal(i,j) %mod * cal(n-i,m-j) %mod )%mod;
// ans = (ans + (ll)min(i,j) * inv[i+j] %mod * cal(i,j) %mod * cal(n-i,m-j) %mod )%mod;
}
ans = (ll)( min(n,m) - (ll)ans * cal2(n,m)%mod + mod)%mod;
// ans = ((ll)n + m - (ll)ans * cal2(n,m)%mod + mod)%mod;
// ans = ((ll)ans *cal2(n,m)%mod);
cout << ans << endl;
return 0;
}
【纪中集训2019.3.13】fft的更多相关文章
- 【纪中集训2019.3.27】【集训队互测2018】小A的旅行(白)
题目 描述 \(0-n-1\)的图,满足\(n\)是\(2\)的整数次幂, $ i \to j $ 有 $ A_{i,j} $ 条路径: 一条路径的愉悦值定义为起点和终点编号的\(and\)值 ...
- 【纪中集训2019.3.23】Deadline
题意 描述 一个二分图\((A,B)\),每个点额外有一个颜色0或者1: 匹配时,只能相同颜色的点匹配: 给出\(A\)中的颜色,问如何分配\(B\)种的颜色使得\((A,B)\)的最大匹配最小: 范 ...
- 【纪中集训2019.3.12】Z的礼物
题意 已知\(a_{i} = \sum_{j=1}^{i} \{^{i} _{j} \}b_{j}\), 给出\(a_{1} 到 a_{n}\) : 求\(b_{l} 到 b_{r}\)在\(1e9+ ...
- 【纪中集训2019.3.12】Mas的仙人掌
题意: 给出一棵\(n\)个点的树,需要加\(m\)条边,每条边脱落的概率为\(p_{i}\) ,求加入的边在最后形成图中仅在一个简单环上的边数的期望: \(1 \le n \ , m \le 1 ...
- 【纪中集训2019.3.23】IOer
题目 描述 你要在\(m\)天内,刷\(n\)道题,每天可以刷的题的数目不限: 第\(i\)天可以刷的题目的种类是\(ui+v\): 两种刷题的方案不同当且仅当某天刷题的数量不同或者依次刷题的种类不同 ...
- 【纪中集训2019.3.11】Cubelia
题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...
- 「中山纪中集训省选组D1T1」最大收益 贪心
题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...
- 纪中集训 Day 2
今天(其实是昨天= =)早上起来发现好冷好冷啊= = 吃完饭就准备比赛了,好吧B组难度的题总有一道不知到怎么写QAQ 太弱了啊!!! 蒟蒻没人权啊QAQ 今天第4题不会写,在这里说说吧 题目的意思就是 ...
- 纪中集训 Day1
今天早上起来吃饭,发现纪中伙食真的是太差了!!!什么都不热,早餐的面包还好,然后就迎来了美好的早晨= = 早上做一套题,T1T2果断秒,T3一看就是noi原题,还好看过题解会写,然后就愉快的码+Deb ...
随机推荐
- 如何掌握 Kubernetes ?系统学习 k8s 的大纲一份
深度剖析 Kubernetes 深度剖析 k8s 如何学习 Kubernetes ?如何入门 Kubernetes? 为了帮帮初学者,2018 年 InfoQ 旗下(就是你知道的那个 InfoQ 哇) ...
- day23 正则,re模块
一. 简谈正则表达式 元字符 . 除了换行符外任意字符. \w 数字.字母.下划线 \s 空白符 \b 单词的末尾 \d 数字 \n 匹配换行符 \t 匹配制表符 \W 除了数字. 字母 下划线 \D ...
- 微信JS-SDK实现上传图片功能
最近在项目开发中,有一个在微信WEB项目中上传图片的需求,一开始使用了传统的<input type="file">的方式去实现,但是后面发现在使用这种传统模式时会由于手 ...
- pwd命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/gnail_oug/article/details/70664458 pwd是Print Working Directory ...
- watch命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/kaishirenshi/p/7727986.html watch 命令详解: author:headsen chen ...
- Ubuntu 1804 本地显示远程服务器文件
本地是 Ubuntu 1804 最近想查看服务器上的图片,之前都是scp到本地,感觉太麻烦,于是查到有一种方法,ssh图形界面那种: 1.在File 界面下,左侧文件栏的最后一列有 “+ Other ...
- Daily Scrum (2015/11/5)
这天晚上我们对爬虫进行了一些测试,发现仍然存在一些不小的BUG.现在我们的爬虫已经能完成基本的功能,焉域政同学也正在把他之前写的分类功能继续完善.在BUG的测试中,我们发现如果要求爬虫爬取特定的文件类 ...
- JAVA第二次试验
北京电子科技学院(BESTI) 实 验 报 告 课程:Java程序设计 班级:1352 姓名:潘俊洋 学号:20135230 成绩: 指导教师:娄嘉鹏 ...
- bug排查
有时候让朋友,或者群友,或者同事帮忙看一样困扰你很久的bug会得到意向不到的结果. 因为他们往往不像你,已经在调试代码的过程中被一些东西给束缚了.他们会凭借自己的第一直觉来尝试解决问题,跳过你已经走的 ...
- Internet 校验和的数学性质
Internet 校验和(Checksum)仅计算头部的正确性,这一点很重要,这意味着 IP 协议不检查 IPv4 packet 有效载荷部分的数据正确性.为了保证有效载荷部分的正常传输,其他协议必须 ...