E: 飞碟解除器

题目描述

wjyyy在玩跑跑卡丁车的时候,获得了一个飞碟解除器,这样他就可以免受飞碟的减速干扰了。
飞碟解除器每秒末都会攻击一次飞碟,但每次只有p/q的概率成功攻击飞碟。当飞碟被成功攻击时,减速状态解除。
如果攻击失败,飞碟会使wjyyy的平均速度变为前一秒的1/k倍。
wjyyy一开始以v m/s的速度行驶,问在减速状态解除时,他期望的行驶距离对998244353取模的结果。

输入

输入共一行,共4个非负整数k,p,q,v。其中gcd(p,q)=1。

输出

输出共一行,表示wjyyy的期望行走距离对998244353取模的结果。

样例输入

2 2 3 9

样例输出

119789331

提示

对于100%的数据,gcd(p,q)=1,1≤k≤998244352,1≤p≤q≤998244352,0≤v≤998244352

提示wjyyy在第一秒走过的距离是v m,如果他此时没有攻击成功,则在第二秒后走过的距离是2×v/k m。
以此类推。

•思路

假设在每秒末飞碟解除

总距离相加得

显而易见(大雾)是一个差比数列前n项和

然后我们就开始高三数学每套试卷都有的错位相减

由于n是趋近于正无穷的所有最后一项的极限为0

所以Sn的极限与等比数列前n项和有关

所以Sn极限为

•代码

  F: gu集合

题目描述

Dew有一个长为n的集合S。有一天,他想选k个不同的元素出来做游戏。
但是Dew只有两只手,所以他只能先选出k个元素,然后拿出这k个元素中最小的两个。
事实上,Dew更喜欢这k个元素中第二小的那个,因此他会记一个集合T的第二小值为g(T)。此时Dew可以获得c^g(T)!的得分,其中c是一个常数,!表示阶乘。
现在你需要求出Dew从集合S中选出k个元素后,他的期望得分对998244353取模的结果。

输入

输入共两行。
第一行三个正整数n,k,c,分别表示集合S的大小,Dew要选的元素个数,和常数c。
第二行n个互不相同的正整数ai,表示集合S中的元素。保证

输出

输出一行一个非负整数,表示 Dew 的期望得分对998244353取模的结果。

样例输入

5 3 2
1 2 3 4 5

样例输出

803628674
 

•思路

有n个数a1,a2,a3,a4,....(升序排列),从中选出k个,

总的情况数是C(n,k)种,

其中a2是第二小数的有C(n-2,k-2)个,a2是第二小,肯定得选a1,a2,再从剩下的(n-2)个里选出(k-2)个

其中a3是第二小数的有2*C(n-3,k-2)个,a3是第二小,肯定得选且只能选a1,a2中的一个即两种情况,再从剩下的(n-3)个里选出(k-2)个

其中a4是第二小数的有3*C(n-4,k-2)个,a4是第二小,肯定得选且只能选a1,a2,a3中的一个即三种情况,再从剩下的(n-4)个里选出(k-2)个

...

得到选每个数的情况是

所以被选择的期望然后再乘以阶乘,最终结果为

细节处理

除法取模:

指数取模:

•代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 998244353
const int maxn=5e5+;
const int maxnn=1e7+;
ll fac[maxn];
ll facc[maxnn];
ll a[maxn]; ll quickMod(ll x,ll y)
{
ll res=;
x=x%mod;
while(y)
{
if(y&)
res=res*x%mod;
x=x*x%mod;
y>>=;
}
return res%mod;
} ll getfac()
{
fac[]=;
for(int i=;i<5e5+;i++)
fac[i]=fac[i-]*i%mod;
} ll getfacc()
{
facc[]=;
for(int i=;i<1e7+;i++)
facc[i]=facc[i-]*i%(mod-);
} int main()
{
int n,k,c;
cin>>n>>k>>c;
getfac();
getfacc();
for(int i=;i<=n;i++)
cin>>a[i];
ll ans=;
for(int i=;i<=n;i++)
{
if(n-i<k-)//防止组合数越界
break;
ans=(ans%mod+(i-)*fac[n-i]%mod*fac[n-k]%mod*fac[k]%mod*quickMod(fac[n-i-k+]*fac[k-]%mod*fac[n]%mod,mod-)%mod*quickMod(c,facc[a[i]])%mod)%mod;;
}
cout<<ans<<endl;
}

 

UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十六场的更多相关文章

  1. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十四场

    A.JOIOJI •传送门 [1]:BZOJ [2]:洛谷 •思路 在一个区间(L,R]内,JOI的个数是相等的,也就是R[J]-L[J]=R[O]-L[O]=R[I]-L[I], 利用前缀和的思想, ...

  2. UPC Contest RankList – 2019年第二阶段我要变强个人训练赛第十五场

    传送门 A: Colorful Subsequence •题意 给一个长为n的小写字母序列,从中选出字母组成子序列 问最多能组成多少种每个字母都不相同的子序列 (不同位置的相同字母也算是不同的一种) ...

  3. UPC 2019年第二阶段我要变强个人训练赛第十六场

    传送门: [1]:UPC比赛场 [2]:UPC补题场 F.gu集合(数论) •题目描述 题目描述: Dew有一个长为n的集合S. 有一天,他想选k个不同的元素出来做游戏. 但是Dew只有两只手,所以他 ...

  4. UPC 2019年第二阶段我要变强个人训练赛第六场

    传送门 A.上学路线 题目描述 小D从家到学校的道路结构是这样的:由n条东西走向和m条南北走向的道路构成了一个n*m的网格,每条道路都是单向通行的(只能从北向南,从西向东走). 已知小D的家在网格的左 ...

  5. 2019年第二阶段我要变强个人训练赛第八场 B.序列(seq)

    传送门 B.序列(seq) •题目描述 给出一个长度为n的序列a,每次对序列进行一下的某一个操作. •输入 第一行两个整数n,q表示序列长度和操作个数. 接下来一行n个数,表示序列a. 接下来q行表示 ...

  6. 备战省赛组队训练赛第十六场(UPC)

    传送门 题解: by 烟台大学 (提取码:8972)

  7. UPC个人训练赛第十五场(AtCoder Grand Contest 031)

    传送门: [1]:AtCoder [2]:UPC比赛场 [3]:UPC补题场 参考资料 [1]:https://www.cnblogs.com/QLU-ACM/p/11191644.html B.Re ...

  8. 备战省赛组队训练赛第十四场(UPC)

    codeforces:传送门 upc:传送门 外来题解: [1]:https://blog.csdn.net/ccsu_cat/article/details/86707446 [2]:https:/ ...

  9. 备战省赛组队训练赛第十八场(UPC)

    传送门 题解:by 青岛大学 A:https://blog.csdn.net/birdmanqin/article/details/89789424 B:https://blog.csdn.net/b ...

随机推荐

  1. vuejs 使用less

    当所有东西都 准备好之后 : 第一步: 安装less依赖, npm install less less-loader --save 第二步: 修改webpack.config.js文件,配置loade ...

  2. Ubuntu --- 安装lnmp(php7.0)

    1.安装nginx sudo apt-get install nginx # 安装 sudo vim /etc/nginx/sites-enabled/default # 修改配置文件 sudo ng ...

  3. SQLAlchemy基本使用,创建表,增删改查

    基础语法 创建连接 from sqlalchemy import create_engine # 写法1 engine = create_engine("postgresql://scott ...

  4. VUE、微信for动态变量取值(拼接取值)

    item.value是其它循的值如value=[1,2,3] {{'images[arrAy' + item.value+']'}} 那么拼接结果是 {{images[arrAy1]}}, {{ima ...

  5. ElasticStack学习(二):ElasticStack安装与运行

    一.ElasticSearch的安装与运行 1.由于ElasticSearch是由Java语言开发的,若要运行ElasticSearch,需要安装并配置JDK,并要设置$JAVA_HOME环境变量. ...

  6. 在CentOS 7上安装Python3

    源码包安装 Python官方没有对Linux打包, 需要下载源码包进行编译. 可以自己下载最新版本的Python, 在Python下载页面, 点击Python3.x.x版本对应的Download, 在 ...

  7. Web自动化测试 二 ----- HTML

    HTML 一.结构 html> 与 </html> 之间的文本描述网页 <body> 与 </body> 之间的文本是可见的页面内容 <h1> 与 ...

  8. 渐进式web应用开发---service worker (二)

    阅读目录 1. 创建第一个service worker 及环境搭建 2. 使用service worker 对请求拦截 3. 从web获取内容 4. 捕获离线请求 5. 创建html响应 6. 理解 ...

  9. 【HDU - 2181】哈密顿绕行世界问题(dfs+回溯)

    -->哈密顿绕行世界问题 Descriptions: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市.  Input 前2 ...

  10. C++ 洛谷 P2657 [SCOI2009]windy数 题解

    P2657 [SCOI2009]windy数 同步数位DP 这题还是很简单的啦(差点没做出来 个位打表大佬请离开(包括记搜),我这里讲的是DP!!! 首先Cal(b+1)-Cal(a),大家都懂吧(算 ...