BZOJ5368:[PKUSC2018]真实排名(组合数学)
Description
Input
Output
Sample Input
1 2 3
Sample Output
3
1
2
样例解释
一共有3种情况:(1,2)翻倍,(1,3)翻倍,(2,3)翻倍。
对于第一个选手来说,他的成绩就算翻倍,其他人都不低于他,所以任意情况下他的排名都不会改变。
对于第二个选手来说,如果是(1,2)翻倍,成绩变成(2,4,3),他的排名变成了第一;
如果是(1,3)翻倍,则成绩变成(2,2,6),他的排名变成了第三;如果是(2,3)翻倍,则成绩变成(1,4,6),他的排名还是第二。
所以只有一种情况。
对于第三个选手来说,如果是(1,2)翻倍,他的排名会变成第二,其他情况下都还是第一。
Solution
传说中的送温暖签到题QAQ?$pkuwc$的时候咋没有呢……
先把数$sort$一下,然后一个一个考虑。
对于当前数$b[i]$,分两种情况(如果$b[i]=b[i-1]$就答案等于前一个数的答案然后$continue$):
1、本身不翻倍,那么只有$b[i]$前面的某一段数是一定不能选的,因为如果选了这一段数的话就会有数超过$b[i]$从而改变排名……二分找一下就好了。
2、$b[i]$本身翻倍,这样$b[i]$后面的某一段数就必须得翻倍把$b[i]$翻下来,不然排名仍然会变。仍然二分找一下。
Code
#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
#define N (100009)
#define MOD (998244353)
using namespace std; struct Node{int x,id,ans;}a[N];
int n,k,x,pos,b[N],inv[N],fac[N],facinv[N];
bool cmp1(Node a,Node b) {return a.x<b.x;}
bool cmp2(Node a,Node b) {return a.id<b.id;} void Init()
{
inv[]=fac[]=facinv[]=;
for (int i=; i<=n; ++i)
{
if (i!=) inv[i]=1ll*(MOD-MOD/i)*inv[MOD%i]%MOD;
fac[i]=1ll*fac[i-]*i%MOD; facinv[i]=1ll*facinv[i-]*inv[i]%MOD;
}
} int C(int n,int m)
{
if (n<m) return ;
return 1ll*fac[n]*facinv[m]%MOD*facinv[n-m]%MOD;
} int main()
{
scanf("%d%d",&n,&k);
Init();
for (int i=; i<=n; ++i)
scanf("%d",&a[i].x), a[i].id=i;
sort(a+,a+n+,cmp1);
for (int i=; i<=n; ++i) b[i]=a[i].x; b[]=-;
for (int i=; i<=n; ++i)
{
if (b[i]==b[i-]) {a[i].ans=a[i-].ans; continue;} x=b[i]/+(b[i]%);//自己不翻倍
pos=lower_bound(b+,b+i,x)-b;
a[i].ans=(a[i].ans+C(pos-+n-i,k))%MOD;//[pos,i-1]不能翻倍,再算上i本身 x=b[i]*;//自己翻倍
pos=lower_bound(b+i+,b+n+,x)-b;
pos--;//[i+1,pos]要翻倍
if (pos-i>k-) continue;
a[i].ans=(a[i].ans+C(i-+n-pos,k--(pos-i)))%MOD;
}
sort(a+,a+n+,cmp2);
for (int i=; i<=n; ++i)
printf("%d\n",a[i].ans);
}
BZOJ5368:[PKUSC2018]真实排名(组合数学)的更多相关文章
- bzoj5368 [Pkusc2018]真实排名
题目描述: bz luogu 题解: 组合数计数问题. 首先注意排名指的是成绩不小于他的选手的数量(包括他自己). 考虑怎么增大才能改变排名. 小学生都知道,对于成绩为$x$的人,让他自己不动并让$\ ...
- 【LOJ4632】[PKUSC2018]真实排名
[LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...
- [PKUSC2018]真实排名
[PKUSC2018]真实排名 题目大意: 有\(n(n\le10^5)\)个人,每个人有一个成绩\(A_i(0\le A_i\le10^9)\).定义一个人的排名为\(n\)个人中成绩不小于他的总人 ...
- BZOJ_5368_[Pkusc2018]真实排名_组合数
BZOJ_5368_[Pkusc2018]真实排名_组合数 Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他 ...
- [PKUSC2018]真实排名——线段树+组合数
题目链接: [PKUSC2018]真实排名 对于每个数$val$分两种情况讨论: 1.当$val$不翻倍时,那么可以翻倍的是权值比$\frac{val-1}{2}$小的和大于等于$val$的. 2.当 ...
- 【洛谷5368】[PKUSC2018] 真实排名(组合数学)
点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ...
- bzoj 5368: [Pkusc2018]真实排名
Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ...
- Luogu P5368 [PKUSC2018]真实排名
老年选手只会做SB题了(还调了好久) 很容易想到分类讨论,按第\(i\)个人有没有翻倍来算 若\(a_i\)未翻倍,显然此时将\([0,\lceil \frac{a_i}{2}\rceil)\)的数和 ...
- LOJ6432 [PKUSC2018] 真实排名 【组合数】
题目分析: 做三个指针然后预处理阶乘就行. 题目代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; struct n ...
随机推荐
- JUC源码阅读参考文章
(飞哥)http://brokendreams.iteye.com/blog/2252081 (熊猫)http://blog.csdn.net/xiaoxufox/article/details/51 ...
- Java - 线程Join与interrupt
Java多线程系列--“基础篇”08之 join() 概要 本章,会对Thread中join()方法进行介绍.涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_ ...
- ubuntu 17.10 安装后的应用软件安装
目录 安装 sogou 拼音 安装markdown编辑器 安装codeblocks 下载工具uGet+aira2 安装QT 安装remarkable(markdown工具) 安装StarUML(UML ...
- Linux常用基本命令(tail )
tail命令 作用:从文件的尾部查看,跟head命令作用相反,参数也差不多,默认显示后面10行 格式: tail [option] [file] -n : 显示行数 -c<字节数> gho ...
- 在学习使用webpack中遇到的错误
1.局部安装webpack之后使用node_modules/.bin/webpack app/main.js public/bundle.js命令报错 解决方法: webpack版 ...
- Angular 实现Bootstrap ScrollSpy控件
Bootstap是基于JQuery开发,Angular中不支持Bootstrap相关事件逻辑.本文基于Typecript开发了一个Angular可用的ScrollSpy控件.Scrollspy控件主要 ...
- vue中prop传值时加不加v-bind(冒号:)
前言:有关Vue中父组件通过prop传值给子组件时,是否加v-bind的问题,没弄清楚时感觉很乱,弄清楚之后很简单. 由于结果记起来很容易,所以先给出结果: 只有传递字符串常量时,不采用v-bind形 ...
- JavaScript实现时间查询
首先要引入js文件和css文件 <script src="jquery-1.11.2.min.js"></script> <script src=&q ...
- 使用Picasso将加载的图片变成圆形
http://blog.it985.com/14794.html,感谢该作者 Picasso的GITHUB地址:https://github.com/square/picasso. 怎么实现各种各样的 ...
- linux svn配置与使用
svn错误码对照表: http://docs.sharpsvn.net/current/html/T_SharpSvn_SvnErrorCode.htm https://www.cnblogs ...