[LOJ6432] [PKUSC2018] 真实排名
题目链接
LOJ:https://loj.ac/problem/6432
Solution
假设我们当前要算\(x\)的答案,分两种情况讨论:
- \(x\)没被翻倍,那么\([a_x/2,a_x]\)这个区间的数不能动,其他的随便选,组合数就好了。
- \(x\)翻倍了,那么\([a_x,a_x*2]\)这个区间一定要翻倍,其他的随便选。
实现的时候排序然后指针扫一下就好了。
Code
#include<bits/stdc++.h>
using namespace std;
void read(int &x) {
    x=0;int f=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=-f;
    for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';x*=f;
}
void print(int x) {
    if(x<0) putchar('-'),x=-x;
    if(!x) return ;print(x/10),putchar(x%10+48);
}
void write(int x) {if(!x) putchar('0');else print(x);putchar('\n');}
#define lf double
#define ll long long 
#define pii pair<int,int >
#define vec vector<int >
#define pb push_back
#define mp make_pair
#define fr first
#define sc second
#define FOR(i,l,r) for(int i=l,i##_r=r;i<=i##_r;i++) 
const int maxn = 2e5+10;
const int inf = 1e9;
const lf eps = 1e-8;
const int mod = 998244353;
int n,k,ans[maxn],fac[maxn],ifac[maxn],inv[maxn],t[maxn];
struct data{int x,id,ans;}a[maxn];
int add(int x,int y) {return x+y>=mod?x+y-mod:x+y;}
int del(int x,int y) {return x-y<0?x-y+mod:x-y;}
int mul(int x,int y) {return 1ll*x*y-1ll*x*y/mod*mod;}
void prepare() {
    inv[0]=inv[1]=ifac[0]=fac[0]=1;
    FOR(i,1,n) fac[i]=mul(fac[i-1],i);
    FOR(i,2,n) inv[i]=mul(mod-mod/i,inv[mod%i]);
    FOR(i,1,n) ifac[i]=mul(ifac[i-1],inv[i]);
}
int c(int x,int y) {
    if(x<y||x<0) return 0;
    return mul(mul(fac[x],ifac[y]),ifac[x-y]);
}
int cmp1(data x,data y) {return x.x<y.x;}
int cmp2(data x,data y) {return x.id<y.id;}
int main() {
    read(n),read(k);FOR(i,1,n) read(a[i].x),a[i].id=i;
    prepare();sort(a+1,a+n+1,cmp1);a[0].x=-1;
    for(int i=1;i<=n;i++) if(a[i].x==a[i-1].x) t[i]=t[i-1];else t[i]=n-i+1;
    int p=0;a[0].x=0;
    for(int i=1;i<=n;i++) {
        while((a[p+1].x<<1)<a[i].x) p++;
        a[i].ans=add(a[i].ans,c(p+t[i]-1,k));
    }p=1;
    for(int i=1;i<=n;i++) {
        while(a[p+1].x<(a[i].x<<1)&&p+1<=n) p++;
        a[i].ans=add(a[i].ans,c(n-(p-i+1),k-(p-i+1)));
    }for(int i=1;i<=n;i++) if(a[i].x==a[i-1].x) a[i].ans=a[i-1].ans;
    sort(a+1,a+n+1,cmp2);
    for(int i=1;i<=n;i++) write(a[i].x==0?c(n,k):a[i].ans);
    return 0;
}
[LOJ6432] [PKUSC2018] 真实排名的更多相关文章
- LOJ6432 [PKUSC2018] 真实排名 【组合数】
		题目分析: 做三个指针然后预处理阶乘就行. 题目代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; struct n ... 
- 【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.当 ... 
- BZOJ5368:[PKUSC2018]真实排名(组合数学)
		Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己). 例如如果333位选手的成绩分别 ... 
- bzoj 5368: [Pkusc2018]真实排名
		Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[ ... 
- bzoj5368 [Pkusc2018]真实排名
		题目描述: bz luogu 题解: 组合数计数问题. 首先注意排名指的是成绩不小于他的选手的数量(包括他自己). 考虑怎么增大才能改变排名. 小学生都知道,对于成绩为$x$的人,让他自己不动并让$\ ... 
- 【洛谷5368】[PKUSC2018] 真实排名(组合数学)
		点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类 ... 
随机推荐
- SIGIR2018 Paper Abstract Reading Notes (1)
			1.A Click Sequence Model for Web Search(日志分析) 更好的理解用户行为对于推动信息检索系统来说是非常重要的.已有的研究工作仅仅关注于建模和预测一次交互行为,例如 ... 
- 【CPLEX教程03】java调用cplex求解一个TSP问题模型
			00 前言 前面我们已经搭建好cplex的java环境了,相信大家已经跃跃欲试,想动手写几个模型了.今天就来拿一个TSP的问题模型来给大家演示一下吧~ CPLEX系列教程可以关注我们的公众号哦!获取更 ... 
- SQL基础-过滤数据
			一.过滤数据 1.使用WHERE子句 过滤数据:关键字WHERE SELECT 字段列表 FROM 表名 WHERE 过滤条件; 过滤条件一般由要过滤的字段.操作符.限定值三部分组成: 如: SELE ... 
- GoCN每日新闻(2019-10-17)
			GoCN每日新闻(2019-10-17) 通过go module管理go tool https://marcofranssen.nl/manage-go-tools-via-go-modules/ 使 ... 
- avalon数据已更新,视图未更新的bug修复
			$computed: { pinlei() { var key = this.currentProduct.key || 'youpin'; console.log(key, "我是key& ... 
- 2015-2016-2《Java程序设计》团队博客3
			项目进展 这周就是对上周所列出的类进行具体实现.但是到目前为止还没有遇到一些实质性的问题.虽然感觉没有问题就是最大的问题,但是还是希望能够尽早发现bug并及时改掉. 目前已经完成前几个文件之间的架构, ... 
- hadoop平台上HDFS和MAPREDUCE的功能、工作原理和工作过程
			作业要求来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3319 1.用自己的话阐明Hadoop平台上HDFS和MapReduce ... 
- Systemback制作大于4G的Ubuntu系统镜像
			1 安装Systemback 依此执行如下命令. sudo apt-get update sudo add-apt-repository ppa:nemh/systemback sudo apt-ge ... 
- mysql死锁(锁与事务)
			线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ... 
- Python装饰器之functools.wraps的作用
			# -*- coding: utf-8 -*- # author:baoshan def wrapper(func): def inner_function(): pass return inner_ ... 
