[PKUSC2018]真实排名

题目描述

小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己)。例如如果 \(3\) 位选手的成绩分别是 \([1 , 2 ,2]\) ,那么他们的排名分别是 \([3,2,2]\) 。

拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第 \(i\) 个选手的成绩为\(A_i\),且由于你是上帝视角,所以如果不发生任何意外的话,你估计的成绩就是选手的最终成绩。

但是在比赛当天发生了不可抗的事故(例如遭受到了外星人的攻击),导致有一些选手的成绩变成了最终成绩的两倍,即便是有上帝视角的你也不知道具体是哪些选手的成绩翻倍了,唯一知道的信息是这样的选手恰好有 \(k\) 个。

现在你需要计算,经过了不可抗事故后,对于第 \(i\) 位选手,有多少种情况满足他的排名没有改变。

由于答案可能过大,所以你只需要输出答案对 \(998244353\) 取模的值即可。

输入格式

第一行两个正整数 \(n,k\)

第二行 \(n\) 个非负整数 \(A_1..A_n\)

输出格式

输出 \(n\) 行,第 \(i\) 行一个非负整数 \(ans_i\),表示经过不可抗事故后,第 \(i\) 位选手的排名没有发生改变的情况数。

样例 #1

样例输入 #1

3 2
1 2 3

样例输出 #1

3
1
2

提示

对于 \(10\%\) 的数据,有 \(1\leq n\leq 15\)

对于 \(35\%\) 的数据,有 \(1\leq n\leq 10^3\)

另有 \(10\%\) 的数据,满足每个人的成绩都互不相同

另有 \(10\%\) 的数据,满足 \(0\leq A_i\leq 10^5\)

另有 \(10\%\) 的数据,满足 \(k=85\),\(0\leq A_i\leq 600\)

对于\(100\%\)的数据,有\(1\leq k < n\leq 10^5\),\(0\leq A_i\leq 10^9\)

考虑把所有 \(a\) 排序后处理。

\(a\) 数组中,如果第 \(i\) 个数不乘2,那么大于等于 \(a_i\) 的数随便乘,小于 \(a_i\) 的,要满足 \(2a_j<a_i\) 的 \(a_j\) 才可以给 \(a_j\) 乘2.

如果第 \(i\) 个数乘了 2,那么 所有满足 \(a_i\le a_j,2a_i>a_j\) 的数都要乘个 2,其余随便。

用双指针维护即可。

小细节:

  1. 注意双指针时 while 里面两个都不去等。
  2. 注意处理组合数时不要把 \(k\) 减出界。
  3. 注意 \(2\times 0=0\),所以要特判 \(a_i=0\)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,P=998244353;
int n,k,a[N],f[N],id[N],inv[N],ans[N],iv[N],l,r;
int cmp(int x,int y)
{
return a[x]<a[y];
}
int calc(int x,int y)
{
// if(x==1&&y==0)
// printf("%d %d %d\n",f[x],iv[y],iv[x-y]);
return 1LL*f[x]*iv[y]%P*iv[x-y]%P;
}
int main()
{
iv[0]=inv[1]=iv[1]=f[0]=f[1]=1;
scanf("%d%d",&n,&k);
for(int i=2;i<=n;i++)
{
f[i]=1LL*f[i-1]*i%P;
inv[i]=1LL*(P-P/i)*inv[P%i]%P;
iv[i]=1LL*iv[i-1]*inv[i]%P;
}
// printf("%d\n",calc(2,2));
for(int i=1;i<=n;i++)
scanf("%d",a+i),id[i]=i;
sort(id+1,id+n+1,cmp);
sort(a+1,a+n+1);
for(int i=1;i<=n;i++)
{
r=max(r,i);
if(i^1&&a[i]==a[i-1])
{
ans[id[i]]=ans[id[i-1]];
continue;
}
// printf("%d %d\n",l,r);
while(a[l+1]*2<a[i])
++l;
ans[id[i]]=calc(l+n-i,k);
while(r^n&&a[i]*2>a[r+1])
++r;
// printf("%d %d\n",i-1+n-r,k-r+i-1);
if(r-i+1<=k)
(ans[id[i]]+=calc(i-1+n-r,k-r+i-1))%=P;
// printf("%d %d\n",l,r);
}
for(int i=1;i<=n;i++)
printf("%d\n",ans[i]);
}

[洛谷P5368] [PKUSC2018] 真实排名的更多相关文章

  1. Luogu P5368 [PKUSC2018]真实排名

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

  2. 「Luogu P5368 [PKUSC2018]真实排名」

    PKUSC签到题 题目大意 给出一个长度为 \(N\) 的序列,序列中有 \(K\) 个数会乘二,对于每个数计算在乘二后大于等于这个数的个数与乘二前没有发生变化的方案数. 分析 思路很清晰,可以将答案 ...

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

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

  4. [PKUSC2018]真实排名

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

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

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

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

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

  7. 【洛谷 P4291】 [HAOI2008]排名系统(Splay,Trie)

    题目链接 不是双倍经验我会去\(debug\)一上午? 一开始我是用的\(map+string\),跑的太慢了,T了4个点. 后来我手写了\(string\),重载了小于号,依然用的\(map\),T ...

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

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

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

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

  10. bzoj 5368: [Pkusc2018]真实排名

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

随机推荐

  1. AT_agc064_a题解

    题面 题目大意 给定一个正整数 \(N\),要求构造一个序列.对于每一个在 \(1\) 到 \(N\) 之间的整数 \(i\),序列中包含了 \(i\) 个,并且将该序列首尾相接拼成环后,相邻两项之差 ...

  2. 「AntV」x6 框选添加右键菜单

    今天在群里有个小伙伴提出了这么个问题:如何在框选完成后给框选的区域添加一个右键菜单的功能,我看到了这个问题后也是有点懵,心里想着怎么还有这个需求,直接快捷键删除不是更好吗,谁知这位小伙伴也是这么写的, ...

  3. AI绘画StableDiffusion实操教程:月光下的美人(含高清图片)

    本教程收集于:AIGC从入门到精通教程汇总 今天继续分享AI绘画实操教程,如何用lora包生成超真实好看质感超强的人物图片. 放大高清图已放到教程包内,需要的可以自取. 出图效果: 更多图片资源访问查 ...

  4. LeetCode 周赛上分之旅 #43 计算机科学本质上是数学吗?

    ️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问. 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越 ...

  5. Dubbo3应用开发—Dubbo直连开发相关概念:通信、协议、序列化

    Dubbo RPC直连应用的概念 所谓的Dubbo RPC直连应用,指的就是Consumer直接访问Provider,而无需注册中心的接入. Dubbo完成的仅仅是RPC最基本的功能. 从这个角度Du ...

  6. [最优化DP]决策单调性

    决策单调性的概念&证明工具: 决策单调性,是在最优化dp中的可能出现的一种性质,利用它我们可以降低转移的复杂度. 首先dp中会有转移,每个状态都由若干个状态转移而来,最优化dp比较特殊,只能由 ...

  7. zabbix 监控 IPMI

    1.IPMI的相关介绍: 智能平台管理接口(Intelligent Platform Management Interface)原本是一种Intel架构的企业系统的周边设备所采用的一种工业标准.IPM ...

  8. 交互式数据分析和python笔记

    1.安装conda 类似npm的n https://www.jianshu.com/p/544a4c8a8186 # 安装python 以及依赖 conda create -n joy python= ...

  9. 一元多项式求和(c++源码)

    LinkList.h #ifndef LINKLIST_H_ #define LINKLIST_H_ #include<stdio.h> template<class T> s ...

  10. 二进制安装Kubernetes(k8s)v1.28.3

    二进制安装Kubernetes(k8s)v1.28.3 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k ...