「PKUSC2018」真实排名(排列组合,数学)
前言
为什么随机跳题会跳到这种题目啊?
Solution
我们发现可以把这个东西分情况讨论:
1.这个点没有加倍
- 这一段相同的可以看成一个点,然后后面的都可以。
- 这一段看成一个点,然后前面的不能对他造成影响的都可以。
2.这个点加倍了
- 这一段相同的看做一个点,然后前面的都可以
- 这一段相同的看成一个点,然后后面的如果对他的排名有影响,一定要加倍。
剩下的用组合数随便乱算一下就好了。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
#include<iostream>
using namespace std;
#define ll long long
#define re register
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
inline int gi(){
int f=1,sum=0;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
return f*sum;
}
const int N=100010,Mod=998244353;
struct node{int id,val;};
bool cmp(node a,node b){return a.val<b.val;}
node a[N];
int jc[N],jcn[N],inv[N],n,k,ans[N],pre[N],last;
int C(int n,int m){
if(n<0 || m<0 || n<m)return 0;
return (ll)jc[n]*jcn[m]%Mod*jcn[n-m]%Mod;
}
void init(){
jc[0]=jcn[0]=inv[1]=1;
for(int i=1;i<=n;i++)jc[i]=(ll)jc[i-1]*i%Mod;
for(int i=2;i<=n;i++)inv[i]=(ll)(Mod-Mod/i)*inv[Mod%i]%Mod;
for(int i=1;i<=n;i++)jcn[i]=(ll)jcn[i-1]*inv[i]%Mod;
}
int main(){
n=gi();k=gi();
for(int i=1;i<=n;i++)a[i].val=gi(),a[i].id=i;
init();
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(a[last].val!=a[i].val)last=i;
pre[i]=last;
}
for(int i=1;i<=n;i++){
int tmp=i;
int now=a[tmp].id,have;i=pre[i];
have=n-i;
int l=1,r=i-1,wh=0;
while(l<=r){
int mid=(l+r)>>1;
if(a[mid].val*2>=a[i].val){wh=mid;r=mid-1;}
else l=mid+1;
}
have+=i-1;
if(wh)have-=i-wh;
ans[now]=C(have,k);
have=i-1;int K=k-1;
l=1,r=n;wh=0;
while(l<=r){
int mid=(l+r)>>1;
if(a[mid].val<a[i].val*2){wh=mid;l=mid+1;}
else r=mid-1;
}
if(!wh)have+=n-i;
else{K=K-wh+i;have+=n-wh;}
ans[now]=(ans[now]+C(have,K))%Mod;
i=tmp;
}
for(int i=1;i<=n;i++)printf("%d\n",ans[i]);
return 0;
}
「PKUSC2018」真实排名(排列组合,数学)的更多相关文章
- 「PKUSC2018」真实排名(组合)
一道不错的组合数问题! 分两类讨论: 1.\(a_i\) 没有翻倍,那些 \(\geq a_i\) 和 \(a_j\times 2<a_i\) 的数就没有影响了.设 \(kth\) 为 \(a_ ...
- LOJ #6432. 「PKUSC2018」真实排名(组合数)
题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 ...
- 【LOJ】#6432. 「PKUSC2018」真实排名
题解 简单分析一下,如果这个选手成绩是0,直接输出\(\binom{n}{k}\) 如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这\(a ...
- 「PKUSC2018」真实排名
题面 题解 因为操作为将一些数字翻倍, 所以对于一个数\(x\), 能影响它的排名的的只有满足\(2y\geq x\)或\(2x>y\)的\(y\) 将选手的成绩排序,然后考虑当前点的方案 1. ...
- LOJ #6432. 「PKUSC2018」真实排名
题目在这里...... 对于这道题,现场我写炸了......谁跟我说组合数O(n)的求是最快的?(~!@#¥¥%……& #include <cstdio> #include < ...
- Loj 6432. 「PKUSC2018」真实排名 (组合数)
题面 Loj 题解 枚举每一个点 分两种情况 翻倍or不翻倍 \(1.\)如果这个点\(i\)翻倍, 要保持排名不变,哪些必须翻倍,哪些可以翻倍? 必须翻倍: \(a[i] \leq a[x] < ...
- #6432. 「PKUSC2018」真实排名(组合数学)
题面 传送门 题解 这数据范围--这输出大小--这模数--太有迷惑性了-- 首先对于\(0\)来说,不管怎么选它们的排名都不会变,这个先特判掉 对于一个\(a_i\)来说,如果它不选,那么所有大于等于 ...
- Loj#6432「PKUSC2018」真实排名(二分查找+组合数)
题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int p ...
- LOJ 6432 「PKUSC2018」真实排名——水题
题目:https://loj.ac/problem/6432 如果不选自己,设自己的值是 x ,需要让 “ a<x && 2*a>=x ” 的非 x 的值不被选:如果选自己 ...
随机推荐
- Vue学习笔记:基础
Vue实例 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的 插值 数据绑定最常见的形式就是使用“Mustache”语法(双大括号)的文本插值 指令 指令的定义:Direct ...
- 【NIFI】 开发自定义Nifi Processor
本例需要基础知识:[NIFI] Apache NiFI 安装及简单的使用 Nifi不光可以使用自带的Processor,还可以自定义Processor.本例简单介绍开发一个Processor 开发 1 ...
- Mac 更换桌面背景崩溃(闪退)
更新完系统后就会出现这种情况,,其实就是用户偏好文件出了问题. 1. 在终端输入 cd /Users/YourUserName/Library/Preferences //进入文件夹 rm com.a ...
- 学会谈判zz
经常有人问我,为什么谈判到你手里就变得那么容易?你有什么诀窍?其实只要是谈判,涉及双方利益,就绝不会轻松.之所以能谈判成功,仔细想想秘诀无非是两个字:“双赢”.要想成功,就要双方都受益.如果你一开始就 ...
- @RequestBody jackson解析复杂的传入值的一个坑;jackson解析迭代数组;jackson多重数组;jakson数组
一.实际开发的一个问题. 传入一个json数组,数组中还嵌套数组,运用springboot+Jpa框架,@RequestBody注解传入数据 Controller @ApiOperation(valu ...
- 获取当前操作的IFrame对象的方法
分两种情况:第一种:获取JS函数在父页面上,如下 function getIframeByElement(element){ var iframe; $("iframe").eac ...
- 20155205 2016-2017-2 《Java程序设计》第6周学习总结
20155205 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 第十章 在Java中,输入串流代表对象为Java.io.InputStream实例,输出串流 ...
- 查看Redis集群主从对应关系工具
工具的作用: 1)比"cluster nodes"更为直观的显示结果 2)指出落在同一个IP上的master 3)指出落在同一个IP上的master和slave对 运行效果图: 源 ...
- Docker Swarm集群部署
一.系统环境 1)服务器环境 节点名称 IP 操作系统 内核版本 manager 172.16.60.95 CentOs7 4.16.1-1.el7.elrepo.x86_64 node-01 172 ...
- spring之IOC和DI实现
Spring核心思想 : IOC控制反转 DI依赖注入 AOP切面编程 IOC思想: 场景描述: 在没有加入spring框架之前我们调取业务层时需要创建对象,例如: 接口名 变量名=new 接 ...