[LOJ 6432][PKUSC 2018]真实排名】的更多相关文章

[LOJ 6432][PKUSC 2018]真实排名 题意 给定 \(n\) 个选手的成绩, 选中其中 \(k\) 个使他们的成绩翻倍. 对于每个选手回答有多少种方案使得他的排名不发生变化. \(n\le 10^5\) 题解 场上唯一A掉的题? 分两类讨论, 一类是当前选手翻倍了, 一类是不加倍. 如果当前选手不加倍, 那么所有加倍后会超过当前选手的选手都不能加倍, 其他人随意. 方案数量显然就是在剩下的人中选 \(k\) 个的方案数量. 如果当前选手加倍, 那么所有加倍后被超过的选手也必须加倍…
[LOJ 6435][PKUSC 2018]星际穿越 题意 给定 \(n\) 个点, 每个点与 \([l_i,i-1]\) 之间的点建立有单位距离的双向边. \(q\) 组询问从 \(x\) 走到 \([l,r]\) 中的随机一点的期望距离. 输出既约分数. \(n,q\le 3\times 10^5\), \(l<r<x\). 题解 显然对于一个 \(k\), \(k\) 步之内能到达的点是 \([1,x)\) 的一个后缀. 那么也就是说 \([1,x)\) 中的点的答案被分成了若干段, 每…
[LOJ 6433][PKUSC 2018]最大前缀和 题意 给定一个长度为 \(n\) 的序列, 求把这个序列随机打乱后的最大前缀和的期望乘以 \(n!\) 后对 \(998244353\) 取膜后的值. 前缀和不能为空. \(n\le 20\). 题解 首先这个期望显然是逗你玩的...只是计数而已 然后我们把一个序列拆成两部分, 一部分前缀和都不大于总和, 一部分前缀和都不大于 \(0\). 那么显然这样的一个序列的最大前缀和就是第一部分的和. 我们只要知道有多少个这样的序列就好了. 后面的…
PKUWC2018 真实排名 题面描述 共有\(n\)个人,每个人有一个能力值,每个人的排名为所有能力值不比他小的人的个数(包括他自己). 现在有\(k\)个人能力值翻倍,但我们无法得知是哪\(k\)个人 问每个人有多少种情况排名不变. 思路 把所有人按照能力值从小到大排序. 分类讨论一下:此人是否翻倍. 若此人翻倍,则他后面有一段的人也要跟着翻倍,否则就会被他超过 若此人不翻倍,则他前面有一段的人也不能翻倍,否则就会超过他 另外特判一下\(0\)的情况即可 代码 #include<bits/s…
题面 LOJ #6432. 「PKUSC2018」真实排名 注意排名的定义 , 分数不小于他的选手数量 !!! 题解 有点坑的细节题 ... 思路很简单 , 把每个数分两种情况讨论一下了 . 假设它为 \(x\) . 不对它进行翻倍操作 : 那么很容易发现 \(\displaystyle [\lceil \frac{x}{2}\rceil, x)\) 的数都不翻倍 . 其余部分任意 . 假设有 \(tot\) 个 . 那么这部分答案就是 \(\displaystyle \binom {n-tot…
PKUSC 2018 题解 Day 1 T1 真实排名 Link Solution 考虑对于每一个人单独算 每一个人有两种情况,翻倍和不翻倍,他的名次不变等价于大于等于他的人数不变 设当前考虑的人的成绩为 \(v\) 翻倍的话,要求成绩在 \([v, 2v-1]\) 的人全部翻倍,剩下的随便 统计一下这段区间的人数,组合数算一下即可 不翻倍的话,要求成绩在 \([\frac {v+1} 2,v-1]\) 的人不翻倍,因为他们如果翻倍就超过了当前这个人 所以同样统计一下,加上组合数即可 注意成绩为…
[LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己).例如如果 \(3\) 位选手的成绩分别是 \([1,2 ,2]\) ,那么他们的排名分别是 \([3,2,2]\) . 拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第 \(i\) 个选手的成绩为\(A_i\)​,…
[PKUSC2018]真实排名 题目大意: 有\(n(n\le10^5)\)个人,每个人有一个成绩\(A_i(0\le A_i\le10^9)\).定义一个人的排名为\(n\)个人中成绩不小于他的总人数.现在恰好有\(k\)个人的成绩翻倍.问对于每个人,有多少种情况满足这个人的排名不变. 思路: 排名不变的情况不外乎两种: \(A_i\)本身不翻倍,且满足\(\lfloor\frac{A_i+1}2\rfloor\le A_j<A_i\)的\(A_j\)均不翻倍. \(A_i\)本身翻倍,且满足…
BZOJ_5368_[Pkusc2018]真实排名_组合数 Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己).例如如果333位选手的成绩分别是[1,2,2],那么他们的排名分别是[3,2,2].拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第iii个选手的成绩为Ai,且由于你是上帝视角,所以如果不发生任何意外的话,你估计的成绩就是选手的最终…
题目链接: [PKUSC2018]真实排名 对于每个数$val$分两种情况讨论: 1.当$val$不翻倍时,那么可以翻倍的是权值比$\frac{val-1}{2}$小的和大于等于$val$的. 2.当$val$翻倍时,显然权值在$[val,val*2-1]$的都要翻倍,剩下可以翻倍的是权值比$val$小的和大于等于$2*val$的. 用权值线段树维护权值,剩下的就是一步组合数.注意对$val=0$的特判. #include<set> #include<map> #include&l…
题面 Loj 题解 枚举每一个点 分两种情况 翻倍or不翻倍 \(1.\)如果这个点\(i\)翻倍, 要保持排名不变,哪些必须翻倍,哪些可以翻倍? 必须翻倍: \(a[i] \leq a[x] < a[i]*2\) 那么其他的都可以选择性翻倍 \(2.\) 考虑点\(i\)不翻倍, 不能翻倍的: \(a[i]/2 \leq a[x] < a[i]\) 注意有和\(a[i]\)相等的可以翻倍 以上可以排序后,二分+组合数算 细节比较多,具体看代码 Code #include<cstdio&…
题目:https://loj.ac/problem/6432 如果不选自己,设自己的值是 x ,需要让 “ a<x && 2*a>=x ” 的非 x 的值不被选:如果选自己,需要让 “ a>=x && 2*a<x ” 的非 x 的值被选. 注意是 “非 x ” 的值. #include<cstdio> #include<cstring> #include<algorithm> #define ll long lon…
题解 简单分析一下,如果这个选手成绩是0,直接输出\(\binom{n}{k}\) 如果这个选手的成绩没有被翻倍,那么找到大于等于它的数(除了它自己)有a个,翻倍后不大于它的数有b个,那么就从这\(a + b\)个选手里找翻倍选手使得它排名不变 答案是\(\binom{a + b}{K}\) 如果这个选手成绩翻倍了,那么大于等于它的所有数,依旧大于它的有\(c\)个,然后剩余\(a - c\)个必须翻倍,剩下的翻不翻倍随意,所以答案是 \(\binom{N - (a - c) - 1}{K -…
题面 Loj 题解 普通的暴力是直接枚举改或者不改,最后在判断最后对哪些点有贡献. 而这种方法是很难优化的.所以考虑在排序之后线性处理.首先先假设没有重复的元素 struct Node { int poi, id; } a[N]; bool operator < (const Node &a, const Node &b) { return a.poi < b.poi; } bool operator < (const Node &a, const int &am…
题目在这里...... 对于这道题,现场我写炸了......谁跟我说组合数O(n)的求是最快的?(~!@#¥¥%……& #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; ; ; ll ksm(ll x, ll n) { ll ans = 1ll; //printf("%lld ", x); while( n) { ) ans = ans *…
题目链接 戳我 \(Solution\) 我们将现在所要进行的数设为\(now\) 我们分情况讨论一下 他自己不翻倍 他自己翻倍 我们首先来看看\(1\)操作 如果要满足他对排名没有影响,那么不能进行翻倍的数只有\([\lceil\frac{now}{2}\rceil,now]\).(我考场上不知道在干吗,写的是能进行翻倍的数,麻烦好多,常数也大).我们假设这一段为\(cnt\)个,那么这一段的答案就是: \[C_{n-cnt}^{k}\] 再来看看\(2\)操作 如果我们要讲\(now*2\)…
题面 传送门 题解 这数据范围--这输出大小--这模数--太有迷惑性了-- 首先对于\(0\)来说,不管怎么选它们的排名都不会变,这个先特判掉 对于一个\(a_i\)来说,如果它不选,那么所有大于等于它的数随便选,乘\(2\)之后还是小于它的数也随便选 如果它选呢?所有大于等于它,且小于它的\(2\)倍的数全都得选,剩下的数就随便选不选了 然后没有然后了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b…
题目链接 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(in…
前言 为什么随机跳题会跳到这种题目啊? Solution 我们发现可以把这个东西分情况讨论: 1.这个点没有加倍 这一段相同的可以看成一个点,然后后面的都可以. 这一段看成一个点,然后前面的不能对他造成影响的都可以. 2.这个点加倍了 这一段相同的看做一个点,然后前面的都可以 这一段相同的看成一个点,然后后面的如果对他的排名有影响,一定要加倍. 剩下的用组合数随便乱算一下就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include&…
一道不错的组合数问题! 分两类讨论: 1.\(a_i\) 没有翻倍,那些 \(\geq a_i\) 和 \(a_j\times 2<a_i\) 的数就没有影响了.设 \(kth\) 为 \(a_i\) 的排名,\(down\) 有多少个 \(a_j\times 2<a_i\),答案为 \(C_{down+kth-1}^{k}\) 2.\(a_i\) 有翻倍,那 \(a_i\leq a_j<a_i\times 2\) 的数也必须翻倍.设 \(up\) 为 \(a_i\times 2\) 的…
Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是:成绩不小于他的选手的数量(包括他自己). 例如如果333位选手的成绩分别是[1,2,2],那么他们的排名分别是[3,2,2]. 拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第iii个选手的成绩为Ai,且由于你是上帝视角,所以如果不发生任何意外的话,你估计的成绩就是选手的最终成绩. 但是在比赛当天发生了不可抗的事故(例如遭受到了外…
题面 题解 因为操作为将一些数字翻倍, 所以对于一个数\(x\), 能影响它的排名的的只有满足\(2y\geq x\)或\(2x>y\)的\(y\) 将选手的成绩排序,然后考虑当前点的方案 1. 不翻倍 此时,如果要保证\(x\)的排名不变,那么所有满足\(2y \geq x\)的\(y\)都不能动 设满足\(2y \geq x\)的数有\(\mathrm{Len}\)个,则方案数为\(\binom{n-\mathrm{Len}}{k}\) 2. 翻倍 此时,如果要保证\(x\)的排名不变,那么…
Description 小C是某知名比赛的组织者,该比赛一共有n名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排名是 :成绩不小于他的选手的数量(包括他自己).例如如果3位选手的成绩分别是[1,2,2],那么他们的排名分别是 [3,2,2].拥有上帝视角的你知道所有选手的实力,所以在考试前就精准地估计了每个人的成绩,设你估计的第i 个选手的成绩为Ai,且由于你是上帝视角,所以如果不发生任何意外的话,你估计的成绩就是选手的最终成绩.但 是在比赛当天发生了不可抗的事故(例如遭受到了外星人的…
题目描述: bz luogu 题解: 组合数计数问题. 首先注意排名指的是成绩不小于他的选手的数量(包括他自己). 考虑怎么增大才能改变排名. 小学生都知道,对于成绩为$x$的人,让他自己不动并让$\frac{x}{2} < y \leq x$的$y$增大能把$x$挤下去. 于是分情况讨论. 自己不动,那么上述人都不能增大,答案为在剩下的人中选$k$个的方案数: 自己动,那么自己超过了$\frac{z}{2} \leq x < z$.若这种人有$i$个,那么这$i$个必须都加倍,在$i<…
Python 在解决数据科学任务和挑战方面继续处于领先地位.业已证明最有帮助的Python库,我们选择 20 多个库,因为其中一些库是相互替代的,可以解决相同的问题.因此,我们将它们放在同一个分组. 核心库和统计数据 1. NumPy (提交:17911,撰稿人:641) 官网:http://www.numpy.org/ NumPy 是科学应用程序库的主要软件包之一,用于处理大型多维数组和矩阵,它大量的高级数学函数集合和实现方法使得这些对象执行操作成为可能. 2. SciPy (提交:19150…
点此看题面 大致题意: 有\(n\)个数字,定义一个数的排名为不小于它的数的个数.现要随机将其中\(k\)个数乘\(2\),求对于每个数有多少种方案使其排名不变. 分类讨论 对于这种题目,我们可以分类讨论一下,假设当前考虑第\(i\)个数的答案. 当\(a_i\)不被修改时,因为原先就\(\ge a_i\)的数不可能在修改后\(<a_i\),所以我们就可以知道: 原先就\(\ge a_i\)的数可以随意修改. 原先\(<a_i\)的数如果修改后\(\ge a_i\)就不可以修改. 如果我们将原…
老年选手只会做SB题了(还调了好久) 很容易想到分类讨论,按第\(i\)个人有没有翻倍来算 若\(a_i\)未翻倍,显然此时将\([0,\lceil \frac{a_i}{2}\rceil)\)的数和\([a_i,\infty)\)的数翻倍都可以,记它们的个数为\(x\),则贡献为\(C_x^k\) 若\(a_i\)翻倍了,此时我们要算出\(i\)的排名变化了多少,记为\(dlt\).然后在\([a_i,2a_i)\)之间的数翻倍之后都是会超过\(2a_i\)的,记为\(x\),因此这部分就是\…
PKUSC签到题 题目大意 给出一个长度为 \(N\) 的序列,序列中有 \(K\) 个数会乘二,对于每个数计算在乘二后大于等于这个数的个数与乘二前没有发生变化的方案数. 分析 思路很清晰,可以将答案分为两个部分计算 当前位置的数没有乘二时 当前位置没有乘二,所以所有大于等于自己的元素是否乘二每有影响,如果一个数小于这个数的一半(不可以等于)那么这个数如果乘二也不会产生影响.于是可以计算出大于等于这个数的个数 \(+\) 小于这个数一半的数的个数.接着只需要通过组合数就可以计算你出来了. 当前位…
题目分析: 做三个指针然后预处理阶乘就行. 题目代码: #include<bits/stdc++.h> using namespace std; ; ; int n,k; struct node{ int data,num; }a[maxn]; int ans[maxn]; int fac[maxn],inv[maxn]; int fast_pow(int now,int pw){ )return now; ); z = (1ll*z*z)%mod; ) z = (1ll*z*now)%mod…
Description Solution 我们考虑将问题一步步拆解 第一步求出\(F_{S,i}\)表示一次旅行按位与的值为S,走了i步的方案数. 第二步答案是\(F_{S,i}\)的二维重复卷积,记答案为\(S_{S,i}\),那么\(F_{S,i}\times S_{T,j}\)能够贡献到\(S_{S\&T,i+j}\). 上下两部分是两个问题,我们分开来看. 考虑第一步 设原矩阵为A 根据定义,\[F_{S,i}=\sum\limits_{x\&y=T}A^i_{x,y}\] 容易看…