【BZOJ5322】[JXOI2018]排序问题(模拟)
【BZOJ5322】[JXOI2018]排序问题(模拟)
题面
题解
这题就显得很呆。
显然就是每次找到\([l,r]\)中出现次数最小的那个数并且放一个。
然后随便模拟一下就好了QwQ。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define MOD 998244353
#define TOT 12000001
#define MAX 2000200
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
int jc[TOT];
int fpow(int a,int b){int s=1;while(b){if(b&1)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=1;}return s;}
int n,m,l,r,a[MAX],b[MAX];
int main()
{
jc[0]=1;for(int i=1;i<TOT;++i)jc[i]=1ll*jc[i-1]*i%MOD;
int T=read();
while(T--)
{
n=read();m=read();l=read();r=read();
for(int i=1;i<=n;++i)a[i]=read();
sort(&a[1],&a[n+1]);
int f=r-l+1,ans=1,tot=0,cnt=0;
for(int i=1,j=1;i<=n;i=j)
{
while(j<=n&&a[i]==a[j])++j;
if(a[i]<l||a[i]>r)ans=1ll*ans*jc[j-i]%MOD;
else b[++tot]=j-i,f-=1;
}
sort(&b[1],&b[tot+1]);
for(int i=1,j=1;i<=tot;i=j)
{
while(j<=tot&&b[i]==b[j])++j;
++cnt;a[cnt]=b[i];b[cnt]=j-i;
}
a[++cnt]=1e9;b[cnt]=1;
for(int i=1,M=m;i<=cnt;++i)
{
int s=a[i]-a[i-1];
ll val=1ll*s*f;
if(val>M)
{
for(int j=i;j<cnt;++j)ans=1ll*ans*fpow(jc[a[j]],b[j])%MOD;
int t=a[i-1]+M/f,num=M%f;
ans=1ll*ans*fpow(jc[t],f-num)%MOD*fpow(jc[t+1],num)%MOD;
break;
}
else M-=val,f+=b[i];
}
ans=1ll*jc[n+m]*fpow(ans,MOD-2)%MOD;
printf("%d\n",ans);
}
return 0;
}
【BZOJ5322】[JXOI2018]排序问题(模拟)的更多相关文章
- BZOJ5322 JXOI2018排序问题
对于一个序列,重排后有序的概率显然是∏cnti!/n!,其中cnti为第i种数出现次数.要使概率最小,显然应该让各种数字尽量平均分配.剩下的是div2BC左右的大讨论. #include<ios ...
- BZOJ5322 [Jxoi2018]排序问题 【贪心】
题目链接 BZOJ5322 题解 意思就是使有序的排列尽量少 就是使相同的数尽量少 然后大力贪心即可 #include<algorithm> #include<iostream> ...
- BZOJ5322: [JXOI2018]排序问题
传送门 不难看出期望就是 \(\frac{(n+m)!}{\prod_{v=1}^{max}(cnt_v!)}\),\(cnt_v\) 表示 \(v\) 这个数出现的次数. 贪心就是直接把 \(m\) ...
- 5322: [Jxoi2018]排序问题
5322: [Jxoi2018]排序问题 链接 分析: 每次选一个出现次数最小的. 代码: #include<cstdio> #include<algorithm> #incl ...
- BZOJ5322:[JXOI2018]排序问题——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5322 https://loj.ac/problem/2543 <-可以看数据,要没有这数据我 ...
- 并不对劲的bzoj5322:loj2543:p4561:[JXOI2018]排序问题
题目大意 \(T\)(\(T\leq10^5\))组询问 每次给出\(n,m,l,r\),和\(n\)个数\(a_1,a_2,...,a_n\),要找出\(m\)个可重复的在区间\([l,r]\)的数 ...
- 洛谷P4561 [JXOI2018]排序问题(二分 期望)
题意 题目链接 Sol 首先一种方案的期望等于它一次排好的概率的倒数. 一次排好的概率是个数数题,他等于一次排好的方案除以总方案,也就是\(\frac{\prod cnt_{a_i}!}{(n+m)! ...
- [JXOI2018]排序问题
嘟嘟嘟 这是今天做的第二道九条可怜的题,现在对他的题的印象是:表面清真可做,实则毒瘤坑人. 首先要感谢吉司机,我期望学的特烂,好在样例直接告诉我们期望怎么求了. 令\(b_i\)表示第\(i\)个不同 ...
- yyb省选前的一些计划
突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...
随机推荐
- 敏捷与CMM的恩怨
模式不同,一种是灵活,一种是严肃.
- PHP之CLI模式
转载: http://www.cnblogs.com/zcy_soft/archive/2011/12/10/2283437.html 所有的PHP发行版,不论是编译自源代码的版本还是预创建的版本,都 ...
- Java 简单的登录验证码
1 验证码的作用 验证码是为了区分人与机器,如果没有验证码机制,web网站或者应用会遇到很多问题,具体如下: ① 网站容易被暴力登录攻破密码,可以制作一个自动程序不断的尝试登录,密码很容易被破解,系统 ...
- Azure系列2.1.10 —— CloudBlobClient
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- 搭建ELK日志分析系统
看了辣么多博客,就数这个最详细最容易理解了:https://blog.csdn.net/qq_22211217/article/details/80764568 >>>>> ...
- python语法糖/装饰器
1.python高阶函数和嵌套函数 1.1高阶函数 def func1(x): return x**2 def func2(x): return x**3 def func(x,y): return ...
- linux中一些特殊的中文文件不能删除问题
例: [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# ,),(,,' [root@iZ2zecl4i8oy1rvs00dqzeZ tmp]# echo "rm -rf ...
- QTP 自动化测试桌面程序--笔记(关闭 启动程序脚本) 、安装
0 安装qtp .exe 文件 安装 插件文件(如delph) 1 关闭 启动程序: 将要操作的程序-存入localdatatable中 设置 迭代一次 rem SystemUtil.ClosePro ...
- 四、K8S
一.查看日志 journalctl -xeu kubelet
- tensorflow点滴笔记
1.模型保存 模型保存需要使用函数 tf.train.Saver(), a)创建saver时,可以指定需要存储的tensor,如果没有指定,则全部保存. b) 创建saver时,可以指定保存的模型个数 ...