Description

小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是

:成绩不小于他的选手的数量(包括他自己)。例如如果3位选手的成绩分别是[1,2,2],那么他们的排名分别是

[3,2,2]。拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第i

个选手的成绩为Ai,且由于你是上帝视角,所以如果不发生任何意外的话,你估计的成绩就是选手的最终成绩。但

是在比赛当天发生了不可抗的事故(例如遭受到了外星人的攻击),导致有一些选手的成绩变成了最终成绩的两倍

,即便是有上帝视角的你也不知道具体是哪些选手的成绩翻倍了,唯一知道的信息是这样的选手恰好有k个。现在

你需要计算,经过了不可抗事故后,对于第i位选手,有多少种情况满足他的排名没有改变。由于答案可能过大,

所以你只需要输出答案对998244353取模的值即可。

Solution

分不增大 \(i\) 和增大 \(i\) 讨论一下.

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,mod=998244353;
int n,K,Fac[N],inv[N],a[N],b[N],ans[N];
inline int C(int n,int m){
if(n<m||n<0||m<0)return 0;
return 1ll*Fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main(){
freopen("pp.in","r",stdin);
freopen("pp.out","w",stdout);
cin>>n>>K,Fac[0]=inv[0]=inv[1]=1;
for(int i=1;i<=n;i++)scanf("%d",&a[i]),b[i]=a[i];
for(int i=2;i<=n;i++)inv[i]=(mod-1ll*(mod/i)*inv[mod%i]%mod)%mod;
for(int i=1;i<=n;i++)Fac[i]=1ll*Fac[i-1]*i%mod,inv[i]=1ll*inv[i]*inv[i-1]%mod;
int l1=0,l2=0;
sort(a+1,a+n+1);
for(int i=1;i<=n;i++){
while(a[l1+1]*2<a[i])++l1;
while(a[l2+1]<a[i])++l2;
int t=lower_bound(a+1,a+n+1,2*a[i])-a-1;
int s=t-(lower_bound(a+1,a+n+1,a[i])-a);
if(s>=0)ans[i]=(C(l1+n-i,K)+C(l2+n-t,K-s-1))%mod;
else ans[i]=C(n,K);
}
for(int i=1;i<=n;i++)printf("%d\n",ans[lower_bound(a+1,a+n+1,b[i])-a]);
return 0;
}

bzoj 5368: [Pkusc2018]真实排名的更多相关文章

  1. 【LOJ4632】[PKUSC2018]真实排名

    [LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...

  2. [PKUSC2018]真实排名

    [PKUSC2018]真实排名 题目大意: 有\(n(n\le10^5)\)个人,每个人有一个成绩\(A_i(0\le A_i\le10^9)\).定义一个人的排名为\(n\)个人中成绩不小于他的总人 ...

  3. BZOJ_5368_[Pkusc2018]真实排名_组合数

    BZOJ_5368_[Pkusc2018]真实排名_组合数 Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他 ...

  4. [PKUSC2018]真实排名——线段树+组合数

    题目链接: [PKUSC2018]真实排名 对于每个数$val$分两种情况讨论: 1.当$val$不翻倍时,那么可以翻倍的是权值比$\frac{val-1}{2}$小的和大于等于$val$的. 2.当 ...

  5. 【洛谷5368】[PKUSC2018] 真实排名(组合数学)

    点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ...

  6. BZOJ5368:[PKUSC2018]真实排名(组合数学)

    Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己). 例如如果333位选手的成绩分别 ...

  7. bzoj5368 [Pkusc2018]真实排名

    题目描述: bz luogu 题解: 组合数计数问题. 首先注意排名指的是成绩不小于他的选手的数量(包括他自己). 考虑怎么增大才能改变排名. 小学生都知道,对于成绩为$x$的人,让他自己不动并让$\ ...

  8. Luogu P5368 [PKUSC2018]真实排名

    老年选手只会做SB题了(还调了好久) 很容易想到分类讨论,按第\(i\)个人有没有翻倍来算 若\(a_i\)未翻倍,显然此时将\([0,\lceil \frac{a_i}{2}\rceil)\)的数和 ...

  9. LOJ6432 [PKUSC2018] 真实排名 【组合数】

    题目分析: 做三个指针然后预处理阶乘就行. 题目代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; struct n ...

随机推荐

  1. 安装MySQL提示:应用程序无法正常启动(0xc000007b)

    转:https://blog.csdn.net/zztingfeng/article/details/80155624 解决:在百度上下载DirectX修复工具(增强版),修复即可. 链接:http: ...

  2. Razor TagHelper实现Markdown转HTML

    Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 用途 Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人 ...

  3. 三个数组求中位数,并且求最后中位数的中位数-----C++算法实现

    文件Median.h #include <list> class CMedian { public: explicit CMedian(); virtual ~CMedian(); voi ...

  4. CentOS7系统更改网卡名为eth0

    centOS7系统更改网卡名为eth0 1.编辑grub参数 [root@localhost ~]# vim /etc/sysconfig/grub 2.在GRUB_CMDLINE_LINUX行中添加 ...

  5. 【Apache系列】linux下Apache的常用操作

    1. 启动/停止 1.1假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: /usr/local/apache2/bin/apachect ...

  6. bzoj 4598: [Sdoi2016]模式字符串

    题目描述 给出n个结点的树结构T,其中每一个结点上有一个字符,这里我们所说的字符只考虑大写字母A到Z,再给出长度为m的模式串s,其中每一位仍然是A到z的大写字母. Alice希望知道,有多少对结点&l ...

  7. jquery源码解析:each,makeArray,merge,grep,map详解

    jQuery的工具方法,其实就是静态方法,源码里面就是通过extend方法,把这些工具方法添加给jQuery构造函数的. jQuery.extend({ ...... each: function( ...

  8. P4304 [TJOI2013]攻击装置 最小割

    $ \color{#0066ff}{ 题目描述 }$ 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照"日"字攻击其周围的8个位置(x-1, ...

  9. 数论 CF230B T-primes

    CF230B T-primes 我们知道质数是只有两个不同的正数因数的正整数.相似的,我们把一个正整数 t 叫做 T质数,如果 t 恰好有三个不同的正整数因数. 你被给了一个含有 n 个正整数的数组. ...

  10. 【BZOJ1055】[HAOI2008]玩具取名(区间DP)

    [HAOI2008]玩具取名 题目描述 某人有一套玩具,并想法给玩具命名.首先他选择\(WING\)四个字母中的任意一个字母作为玩具的基本名字.然后他会根据自己的喜好,将名字中任意一个字母用" ...