bzoj5368 [Pkusc2018]真实排名
题目描述:
题解:
组合数计数问题。
首先注意排名指的是成绩不小于他的选手的数量(包括他自己)。
考虑怎么增大才能改变排名。
小学生都知道,对于成绩为$x$的人,让他自己不动并让$\frac{x}{2} < y \leq x$的$y$增大能把$x$挤下去。
于是分情况讨论。
自己不动,那么上述人都不能增大,答案为在剩下的人中选$k$个的方案数;
自己动,那么自己超过了$\frac{z}{2} \leq x < z$。若这种人有$i$个,那么这$i$个必须都加倍,在$i<=k-1$答案为剩下的人中选$k-1-i$个的方案数。
排序后可以双指针直接扫,这样排序$O(nlogn)$,计算$O(n)$,跑起来还是比较快的。
最重要的是最大值要至少开成$2e9$。
我不会说我开$0x3f3f3f3f$疯狂$RE$的。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ;
const int MOD = ;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,k,v[N],h[N];
ll jc[N<<],ny[N<<],jn[N<<],ans[N],to[N];
ll C(ll x,ll y){return jn[x]*jn[y-x]%MOD*jc[y]%MOD;}
struct Pair
{
int x,y;
Pair(){}
Pair(int x,int y):x(x),y(y){}
}p[N];
bool cmp(Pair a,Pair b){return a.x<b.x;}
void init()
{
jc[]=jc[]=jn[]=jn[]=ny[]=;
for(int i=;i<=*n;i++)
{
ny[i] = ((MOD-MOD/i)*ny[MOD%i]%MOD+MOD)%MOD;
jc[i] = (jc[i-]*i)%MOD;
jn[i] = (jn[i-]*ny[i])%MOD;
}
}
int main()
{
read(n),read(k);init();
for(int i=;i<=n;i++)
{
read(v[i]);
p[i]=Pair(v[i],i);
}
sort(p+,p++n,cmp);
int mx = ;
for(int las=-,i=;i<=n;i++)
{
if(p[i].x!=las)
{
las = p[i].x;
to[++mx]=las;
}
v[p[i].y]=mx;
h[mx]++;
}
to[mx+]=0x3f3f3f3f3f3f3f3fll;
for(int i=;i<=mx+;i++)h[i]+=h[i-];
for(int tmp,i=,j1=,j2=;i<=mx;i++)
{
while(2ll*to[j1+]<to[i])j1++;
while(to[j2+]<2ll*to[i])j2++;
if(!to[i]){ans[i]=C(k,n);continue;}
if((tmp=h[j1]+n-h[i-]-)>=k)ans[i]=C(k,tmp);
if((tmp=h[j2]-h[i-]-)<=k-&&k--tmp<=h[i-]+n-h[j2])ans[i]=(ans[i]+C(k--tmp,h[i-]+n-h[j2]))%MOD;
}
for(int i=;i<=n;i++)printf("%lld\n",ans[v[i]]);
return ;
}
bzoj5368 [Pkusc2018]真实排名的更多相关文章
- BZOJ5368:[PKUSC2018]真实排名(组合数学)
Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己). 例如如果333位选手的成绩分别 ...
- 【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.当 ...
- bzoj 5368: [Pkusc2018]真实排名
Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ...
- 【洛谷5368】[PKUSC2018] 真实排名(组合数学)
点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ...
- 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 ...
随机推荐
- [Xcode 实际操作]八、网络与多线程-(14)使用网址会话对象URLSession将地理坐标转换为地名
目录:[Swift]Xcode实际操作 本文将演示如果通过网址会话对象,将地理坐标转换为地名. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模式等优点. 在项目 ...
- Java 序列化(转)
转自 http://www.infoq.com/cn/articles/cf-java-object-serialization-rmi 对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在 ...
- iPhone X的适配问题
//屏幕宽高 #define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width #define SCREEN_HEIGHT [UIScreen ...
- 【js】我们需要无限滚动列表吗?
无限滚动列表,顾名思义,是能够无限滚动的列表(愿意是指那些能够不断缓冲加载新数据的列表的).但是,我们真的需要这样一个列表吗?在PC端,浏览器的性能其实已经能够满足海量dom节点的渲染刷新(笔者经过简 ...
- 转 JS 中的 this
转载至:https://segmentfault.com/a/1190000009215974 this的指向问题应该是让每一个前端er都头疼的问题,我也一样,曾经遇到甚至都是一顿乱猜.最近在研读一些 ...
- netty与MQ使用心得
最近在做分布式的系统,使用netty与mq进行远程RPC调用,现将心得经验总结一下. 我们公司的服务器在云端机房,在每一个店面有一个服务器,店面服务器外网无法访问. 我们的做法是店面服务器在启动时与云 ...
- AU3中BitAnd与Win32汇编中的&按位进行与操作的本质思考
心越静,思考的越透彻.不要着急,宇宙有求必应!我可能是最笨的才会写出来进行思考,写出来至少自己在碰到这些本质上的问题不会再度卡壳.本着"没有交流的思考不是完整的思考"的原则,我将这 ...
- bzoj2818: Gcd懵逼乌斯反演
由于是单组数据,强行不分块O(n)过 线性筛部分非常神奇,用了一个奇妙的推导(懒得写了) #include <bits/stdc++.h> using namespace std; ],f ...
- IE_Script70:没有权限问题处理
IE9浏览器执行JS时报"SCRIPT70:没有权限"错误. 经百度,发现原来与jQuery版本有关系,在jQuery1.9.1版本时会有此问题,升级版本即可.
- PlSqlDev中执行INSERT SQL语句包含&符号导致数据异常
在PLSQL Developer中执行Insert语句时提示如下信息: 当时未注意,直接点击OK按钮继续. 导入数据后查看发现部分数据中的参数丢失了一部分,呈以下规律: . 而正常应为: . 经询问大 ...