题解

简单分析一下,如果这个选手成绩是0,直接输出\(\binom{n}{k}\)

如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这\(a + b\)个选手里找翻倍选手使得它排名不变

答案是\(\binom{a + b}{K}\)

如果这个选手成绩翻倍了,那么大于等于它的所有数,依旧大于它的有\(c\)个,然后剩余\(a - c\)个必须翻倍,剩下的翻不翻倍随意,所以答案是

\(\binom{N - (a - c) - 1}{K - (a - c) - 1}\)

代码

#include <bits/stdc++.h>
#define fi first
#define se second
#define pii pair<int,int>
#define pdi pair<db,int>
#define mp make_pair
#define pb push_back
#define enter putchar('\n')
#define space putchar(' ')
#define eps 1e-8
#define mo 974711
#define MAXN 100005
//#define ivorysi
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;char c = getchar();T f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {x = -x;putchar('-');}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
const int MOD = 998244353;
int N,K,A[MAXN],val[MAXN];
int fac[MAXN],invfac[MAXN];
int inc(int a,int b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
int mul(int a,int b) {
return 1LL * a * b % MOD;
}
int fpow(int x,int c) {
int res = 1,t = x;
while(c) {
if(c & 1) res = mul(res,t);
t = mul(t,t);
c >>= 1;
}
return res;
}
int C(int n,int m) {
if(n < 0 || m < 0) return 0;
if(n < m) return 0;
return mul(fac[n],mul(invfac[n - m],invfac[m]));
}
void Solve() {
read(N);read(K);
for(int i = 1 ; i <= N ; ++i) {read(A[i]);val[i] = A[i];}
sort(val + 1,val + N + 1);
fac[0] = 1;
for(int i = 1 ; i <= N ; ++i) fac[i] = mul(fac[i - 1],i);
invfac[N] = fpow(fac[N],MOD - 2);
for(int i = N - 1 ; i >= 0 ; --i) invfac[i] = mul(invfac[i + 1],i + 1);
for(int i = 1 ; i <= N ; ++i) {
if(A[i] == 0) {out(C(N,K));enter;continue;}
int res = 0;
int t = lower_bound(val + 1,val + N + 1,A[i]) - val;
int s = lower_bound(val + 1,val + N + 1,A[i] % 2 == 0 ? A[i] / 2 : A[i] / 2 + 1) - val - 1;
res = inc(res,C(N - t + s,K));
int h = lower_bound(val + 1,val + N + 1,2 * A[i]) - val;
h = N - h + 1;
int d = N - t - h;
res = inc(res,C(N - 1 - d,K - 1 - d));
out(res);enter;
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
}

【LOJ】#6432. 「PKUSC2018」真实排名的更多相关文章

  1. LOJ #6432. 「PKUSC2018」真实排名(组合数)

    题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 ...

  2. Loj 6432. 「PKUSC2018」真实排名 (组合数)

    题面 Loj 题解 枚举每一个点 分两种情况 翻倍or不翻倍 \(1.\)如果这个点\(i\)翻倍, 要保持排名不变,哪些必须翻倍,哪些可以翻倍? 必须翻倍: \(a[i] \leq a[x] < ...

  3. LOJ 6432 「PKUSC2018」真实排名——水题

    题目:https://loj.ac/problem/6432 如果不选自己,设自己的值是 x ,需要让 “ a<x && 2*a>=x ” 的非 x 的值不被选:如果选自己 ...

  4. Loj#6432「PKUSC2018」真实排名(二分查找+组合数)

    题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int p ...

  5. LOJ #6432. 「PKUSC2018」真实排名

    题目在这里...... 对于这道题,现场我写炸了......谁跟我说组合数O(n)的求是最快的?(~!@#¥¥%……& #include <cstdio> #include < ...

  6. #6432. 「PKUSC2018」真实排名(组合数学)

    题面 传送门 题解 这数据范围--这输出大小--这模数--太有迷惑性了-- 首先对于\(0\)来说,不管怎么选它们的排名都不会变,这个先特判掉 对于一个\(a_i\)来说,如果它不选,那么所有大于等于 ...

  7. 「PKUSC2018」真实排名(排列组合,数学)

    前言 为什么随机跳题会跳到这种题目啊? Solution 我们发现可以把这个东西分情况讨论: 1.这个点没有加倍 这一段相同的可以看成一个点,然后后面的都可以. 这一段看成一个点,然后前面的不能对他造 ...

  8. 「PKUSC2018」真实排名(组合)

    一道不错的组合数问题! 分两类讨论: 1.\(a_i\) 没有翻倍,那些 \(\geq a_i\) 和 \(a_j\times 2<a_i\) 的数就没有影响了.设 \(kth\) 为 \(a_ ...

  9. 「PKUSC2018」真实排名

    题面 题解 因为操作为将一些数字翻倍, 所以对于一个数\(x\), 能影响它的排名的的只有满足\(2y\geq x\)或\(2x>y\)的\(y\) 将选手的成绩排序,然后考虑当前点的方案 1. ...

随机推荐

  1. call/cc 总结 | Scheme

    call/cc 总结 | Scheme 来源 https://www.sczyh30.com/posts/Functional-Programming/call-with-current-contin ...

  2. sql server 小技巧(4) Sql server 排序时让空值排在最后

    order by  coalesce( u.sort, 2147483647) sql server 小技巧 集锦

  3. docker maven 出错:Failed to execute goal com.spotify:docker-maven-plugin:...: Request error: POST https://192.168.99.100:2376/build?t=

    Spring Boot项目构建docker镜像,出错Failed to execute goal com.spotify:docker-maven-plugin:0.4.13:build (defau ...

  4. oracle递归查询(查询条件ID下得所有子集)

    一.CREATE TABLE TBL_TEST ( ID    NUMBER, NAME  VARCHAR2(100 BYTE), PID   NUMBER                       ...

  5. Django中简单添加HTML、css、js等文件(非正规添加,适合小白)

    Django中简单添加HTML.css.js等文件 首先申明下自己的环境, python版本3.65(亲测3.7版本有毒,没解决掉!) Django版本1.11.15(版本比较成熟,也可以用最新的版本 ...

  6. linux中awk工具的使用(转载)

    awk是一个非常好用的数据处理工具.相较于sed常常一整行处理,awk则比较倾向于一行当中分成数个“字段”处理,awk处理方式如下: $ awk '条件类型1{动作1} 条件类型2{动作2} ...' ...

  7. Mac系统 MAMP 集成环境下搭建 Redis

    之前由于嫌弃 mac 下命令行搭建 php+mysql 环境太复杂,给自己挖了一个大坑 就是偷懒使用了名为 MAMP 的一键集成安装包 好用是好用,但是等你需要添加点模块和功能的时候就傻眼了 这几天在 ...

  8. idea2017破解方法

    破解方法 切换license server然后 输入网址:http://idea.iteblog.com/key.php即可

  9. SQL记录-Linux CentOS配置ORACLE 12c

    1.准备LIINX软件包 操作系统:centos7 虚拟机:VMware 12 JDK:1.8 数据库:oracle 12c 2.配置基础环境 2.1 部署虚拟机VM(过程略) 2.2 部署操作系统C ...

  10. VMware Linux 下 Nginx 安装配置 - nginx.conf 配置 [负载两个 Tomcat] (三)

    首先启动Nginx 1. 相关浏览 两个 Tomcat 配置:  VMware Linux 下 Nginx 安装配置 - Tomcat 配置 (二) Nginx 安装配置启动: VMware Linu ...