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. java多线程之wait和notify

    多线程中的通信是非常重要的概念,线程直接实现通信就可以并发完成很多复杂工作. java在Object类中就设计了wait()和notify()两个方法,以解决这个问题. 1.释义: wait()方法将 ...

  2. tkinter + cefpython 仿美团桌面程序

    使用js开发桌面程序目前是一个趋势,Electron是其中一个佼佼者,网上也不乏很多文章.今天主要是来讲一下cefpython. 用python的朋友,特别使用过tkinter开发过界面的,一定会觉得 ...

  3. 整合SSM框架必备基础—SpringMVC(上)

    01 MVC概述 在Web系统开发中一般按照视图(View).模型(Model).控制(Controller)三层设计模式进行构建,视图层负责模型数据的渲染,将数据用一定的形式展现给用户:模型层负责监 ...

  4. python bmp image injection

    1. 将原BMP文件的第三,第四字节替换为\x2F\x2A, 对应js中的注释符号/*BMP文件的第三.四.五.六字节表示BMP文件的大小2. 在BMP文件末尾添加(1)\xFF(2)\x2A\x2F ...

  5. 【JAVA NIO】java NIO

    本文是博主深入学习Netty前的一些铺垫,之前只是使用Netty,用的很粗暴,导包,上网找个DEMO就直接用,对Netty中的组件了解并不深入. 于是再此总结下基础,并对一些核心组件作如下记录: 1. ...

  6. 微服务之服务注册与发现--Consul(转载)

    http://blog.csdn.net/buxiaoxia/article/details/69788114 https://www.cnblogs.com/xiaohanlin/p/8016803 ...

  7. Python基础(八) 模块的引入与定义

    模块定义 什么是模块:一个py文件就是一个模块 模块分为三类: 内置模块,(标准库):.python解释器自带的,time,os,sys,等等.200多种. 自定义模块:自己写的模块 第三方库(模块) ...

  8. <h2>js数组操作大全(pop,push,unshift,splice,shift方法)</h2>

    ---恢复内容开始--- shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); //a ...

  9. Java NIO学习系列三:Selector

    前面的两篇文章中总结了Java NIO中的两大基础组件Buffer和Channel的相关知识点,在NIO中都是通过Channel和Buffer的协作来读写数据的,在这个基础上通过selector来协调 ...

  10. Codeforces Gym101246G:Revolutionary Roads(DFS+思维)

    http://codeforces.com/gym/101246/problem/G 题意:有一个n个点m条边的有向图,现在可以修改某一条有向边使得其为无向边,问修改哪些边可以使得修改后的强连通分量的 ...