题目链接

BZOJ5322

题解

意思就是使有序的排列尽量少

就是使相同的数尽量少

然后大力贪心即可

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<map>
#define REP(i,n) for (register int i = 1; i <= (n); i++)
#define mp(a,b) make_pair<int,int>(a,b)
#define cls(s) memset(s,0,sizeof(s))
#define cp pair<int,int>
#define LL long long int
#define res register
using namespace std;
const int maxn = 200005,maxm = 10200005,INF = 1000000000,P = 998244353;
inline int read(){
int out = 0,flag = 1; char c = getchar();
while (c < 48 || c > 57){if (c == '-') flag = -1; c = getchar();}
while (c >= 48 && c <= 57){out = (out << 3) + (out << 1) + c - 48; c = getchar();}
return out * flag;
}
int n,m,l,r,a[maxn];
int fac[maxm];
inline int qpow(int a,int b){
int ans = 1;
for (; b; b >>= 1,a = 1ll * a * a % P)
if (b & 1) ans = 1ll * ans * a % P;
return ans;
}
void init(){
fac[0] = 1;
for (res int i = 1; i < maxm; i++)
fac[i] = 1ll * fac[i - 1] * i % P;
}
int bac[maxm],tail;
int main(){
init();
int T = read(),ans;
while (T--){
n = read(); m = read(); l = read(); r = read(); ans = fac[n + m];
REP(i,n) a[i] = read();
sort(a + 1,a + 1 + n);
tail = 0; int cnt = 0,M = 0;
for (res int i = 1; i <= n; i++){
if (i != 1 && a[i] != a[i - 1]){
if (a[i - 1] >= l && a[i - 1] <= r){
bac[cnt]++,tail++,M = max(M,cnt);
}
else ans = 1ll * ans * qpow(fac[cnt],P - 2) % P;
cnt = 1;
}
else cnt++;
}
if (a[n] >= l && a[n] <= r){
bac[cnt]++,tail++,M = max(M,cnt);
}
else ans = 1ll * ans * qpow(fac[cnt],P - 2) % P;
bac[0] += r - l + 1 - tail;
for (res int i = 0; m; i++,M = max(M,i)){
if (M == i){
int tot = m / bac[i],lef = m - tot * bac[i];
ans = 1ll * ans * qpow(qpow(fac[i + tot],P - 2),bac[i] - lef) % P;
ans = 1ll * ans * qpow(qpow(fac[i + tot + 1],P - 2),lef) % P;
bac[i] = M = 0;
break;
}
if (bac[i] >= m){
bac[i + 1] += m;
bac[i] -= m;
m = 0;
}
else {
m -= bac[i];
bac[i + 1] += bac[i];
bac[i] = 0;
}
}
for (res int i = 0; i <= M; i++){
ans = 1ll * ans * qpow(qpow(fac[i],P - 2),bac[i]) % P;
bac[i] = 0;
}
printf("%d\n",ans);
}
return 0;
}

BZOJ5322 [Jxoi2018]排序问题 【贪心】的更多相关文章

  1. BZOJ5322: [JXOI2018]排序问题

    传送门 不难看出期望就是 \(\frac{(n+m)!}{\prod_{v=1}^{max}(cnt_v!)}\),\(cnt_v\) 表示 \(v\) 这个数出现的次数. 贪心就是直接把 \(m\) ...

  2. BZOJ5322 JXOI2018排序问题

    对于一个序列,重排后有序的概率显然是∏cnti!/n!,其中cnti为第i种数出现次数.要使概率最小,显然应该让各种数字尽量平均分配.剩下的是div2BC左右的大讨论. #include<ios ...

  3. 【BZOJ5322】[JXOI2018]排序问题(模拟)

    [BZOJ5322][JXOI2018]排序问题(模拟) 题面 BZOJ 洛谷 题解 这题就显得很呆. 显然就是每次找到\([l,r]\)中出现次数最小的那个数并且放一个. 然后随便模拟一下就好了Qw ...

  4. 5322: [Jxoi2018]排序问题

    5322: [Jxoi2018]排序问题 链接 分析: 每次选一个出现次数最小的. 代码: #include<cstdio> #include<algorithm> #incl ...

  5. BZOJ5322:[JXOI2018]排序问题——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5322 https://loj.ac/problem/2543 <-可以看数据,要没有这数据我 ...

  6. 【JXOI2018】排序问题 贪心

    我们令$sum_i$表示数字i在加完数字的数列中出现的次数,那么答案显然为$\dfrac{(n+m)!}{\sum_{i=0}^{\infty}sum_i!}$ 不难发现,当每次添加的数为$[l,r] ...

  7. 并不对劲的bzoj5322:loj2543:p4561:[JXOI2018]排序问题

    题目大意 \(T\)(\(T\leq10^5\))组询问 每次给出\(n,m,l,r\),和\(n\)个数\(a_1,a_2,...,a_n\),要找出\(m\)个可重复的在区间\([l,r]\)的数 ...

  8. 洛谷P4561 [JXOI2018]排序问题(二分 期望)

    题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...

  9. [JXOI2018]排序问题

    嘟嘟嘟 这是今天做的第二道九条可怜的题,现在对他的题的印象是:表面清真可做,实则毒瘤坑人. 首先要感谢吉司机,我期望学的特烂,好在样例直接告诉我们期望怎么求了. 令\(b_i\)表示第\(i\)个不同 ...

随机推荐

  1. 我所用过的nginx的功能

    前言 当我们提起集群时,一般所用的插件就是nginx.nginx功能如今越来越完善.第三方模块也多如牛毛,在此,总结一下不牵扯第三方模块所具有的功能. 基本功能 反向代理 负载均衡 HTTP服务器(动 ...

  2. PC时代 常用搜索引擎高级指令 勿忘

    PC时代,高级指令辅助检索,高效输出既定的需求,被广泛运用于Search Engine. 布局search入口的平台,高级指令都不可或缺.现今,高级指令的高效性,仍然主要体现在搜索引擎检索过程中. i ...

  3. sort()的部分用法

    #include <iostream> #include <cstdio> #include <algorithm>//sort要包含的头文件 #include & ...

  4. abap<itab>refresh,clear,free

    在ABAP开发过程中,clear,refresh,free都有用来清空内表的作用,但用法还是有区别的. clear itab,清空内表行以及工作区,但保存内存区. clear itab[],清空内表行 ...

  5. 【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

    Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的 ...

  6. octave简易操作

    语言以分号;结尾if for while等语句后用,来承接关系if ,elseif ,else ,end;for i=1:10,end;while a>3 ,end;   while true, ...

  7. Android Studio modify language level to Java 8

    If you need use lambda, should modify language level File -> Project Structure -> app -> Pr ...

  8. MVC中Session的使用和传递

    1.登录时在controller中记录session,代码如下: public ActionResult Login(UserLoginViewModel uViewModel) { if (Mode ...

  9. IdFTP中FEAT命令的问题

    IdFTP控件很方便开发FTP客户端,用于传输文件.一次笔者的一个在阿里云的服务器突发故障,显示无法登陆FTP,而使用其他客户端(如FlashFxp)经过该项目设置,又可正常使用. 查询后说是FEAT ...

  10. 如何在Centos7下升级Apache至最新版本

    Apache是使用最广泛的应用部署软件.并且它也是所有服务器的必要组成部分.安装最新版本的apache意味着拥有更多最新的功能和修复了已知的BUG. 介绍 在这篇教程里面,我将会介绍在Centos7下 ...