首页 > 其他分享 >题解:AT_arc139_d [ARC139D] Priority Queue 2

题解:AT_arc139_d [ARC139D] Priority Queue 2

时间:2024-12-03 19:54:22浏览次数:6  
标签:int 题解 Priority define res ARC139D 位值 mod inc

题面


发现我们不好算到最后还剩些什么。

考虑计算 \(\sum\limits_{i=1}^m\sum\limits_{j=1}^n[s_j\ge i]\),容易发现这和原式等价。

记 \(b_i\) 表示 \(s\) 中不小于 \(i\) 的数的个数,每次删去第 \(x\) 小的等价于将所有超过 \(n-x+1\) 的地方减 1,加入 \(k\) 等价于将 \(b_{1,k}\) 都加 1。

发现最终的答案就是 \(\sum b\)。

考虑计算每一个位值的贡献,以下记 \(x'=n-x+1\)。

枚举每个位值被加了多少次,倘若最初 \(b_i\le x'\),有 \(b_i'=\min(b_i+j,x')\);如果最初 \(b_i>x'\),有 \(b_i'=\max(x,b_i+j-k)\)。其中 \(j\) 是第 \(i\) 个位值被加的次数,\(k\) 是总操作次数。


代码:

#include<bits/stdc++.h>
#define int long long
#define pii pair<int,int>
#define mp(a,b) make_pair(a,b)
#define db long double
using namespace std;
const int mod=998244353;
int n,m,k,x,a[2005];
int c[2005],inc[2005];
int fpow(int a,int b){
	int res=1;
	while(b){
		if(b&1)res=res*a%mod;
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
int C(int n,int m){
	return c[n]*inc[n-m]%mod*inc[m]%mod;
}
signed main()
{
	c[0]=1;
	for(int i=1;i<=2000;i++)c[i]=c[i-1]*i%mod;
	inc[2000]=fpow(c[2000],mod-2);
	for(int i=1999;i>=0;i--)inc[i]=inc[i+1]*(i+1)%mod;
	scanf("%lld%lld%lld%lld",&n,&m,&k,&x);
	x=n+1-x;
	for(int i=1,c;i<=n;i++)scanf("%lld",&c),a[c]++;
	for(int i=m;i>=1;i--)a[i]+=a[i+1];
	int ans=0;
	for(int i=1;i<=m;i++){
		int l=m-i+1,r=i-1;
		for(int j=0;j<=k;j++){
			if(a[i]<=x)ans=(ans+(min(x,a[i]+j)*C(k,j)%mod*fpow(l,j)%mod*fpow(r,k-j)%mod))%mod;
			else ans=(ans+(max(x,a[i]+j-k)*C(k,j)%mod*fpow(l,j)%mod*fpow(r,k-j)%mod))%mod;
		}
	}
	printf("%lld",ans);
	return 0;
}

标签:int,题解,Priority,define,res,ARC139D,位值,mod,inc
From: https://www.cnblogs.com/Miss-Grisses/p/18584935

相关文章

  • 常见问题解决 --- nginx反向代理接口返回404
    可能原因反向代理地址写错了,还有一种可能是没有配置host请求头,导致不能正确找到服务器解决办法:修改nginx反向代理,配置虚拟主机名称,配置举例server{listen8082;server_name172.16.68.3;root/usr/local/nginx/html/;location......
  • P3750 [六省联考 2017] 分手是祝愿 题解
    P3750[六省联考2017]分手是祝愿题面ZeitundRaumtrennendichundmich.时空将你我分开。B君在玩一个游戏,这个游戏由\(n\)个灯和\(n\)个开关组成,给定这\(n\)个灯的初始状态,下标为从\(1\)到\(n\)的正整数。每个灯有两个状态亮和灭,我们用\(1\)来表示这个灯......
  • 第六届金盾信安杯Web题解
    比赛一共4道Web题,比赛时只做出三道,那道文件上传没有做出来,所以这里是另外三道题的WP分别是  fillllll_put   hoverfly  ssrffillllll_put涉及:绕过exit()死亡函数php://filter伪协议配合base64加解密 一句话木马题目源码:$content参数在开头被拼接......
  • [题解](更新中)NOIP 2024 T1~T2
    编辑字符串(edit)初见感觉像贪心,但在不好写+不会证的情况下放弃了,然后想到DP又设不出状态。实际上……就是贪心哦?下文称\(s_1,s_2\)分别为\(a,b\)。不难发现一个不存在锁定位置的区间,其内元素是可以任意交换的。所以我们可以按照锁定位置,将两个字符串划分成若干个区间(被锁定......
  • CF1778D - Flexible String Revisit 题解
    CF1778D-FlexibleStringRevisit题面给出两个长度均为\(n(n\leq10^6)\)的01串\(S\)和\(T\)每次随机将\(S\)中的某一位取反问:第一次\(S=T\)时操作次数的期望题解成环期望的小\(\text{trick}\),可以避免高斯消元和高阶递推。如果我们按照经典的期望\(dp\)......
  • 题解:CF176B Word Cut
    https://www.luogu.com.cn/problem/CF176B没看懂其他题解为什么说"可以发现,只要能从一个串变成一个串,都可以通过仅一次变换得到"。转化将题目中的操作转化一下:对于一个串\(s\),将串\(s\)复制一份接到\(s\)末尾,然后选择一段长度\(n\)的子串。发现:经过一次操作后,接下来......
  • 题解:AT_abc138_f [ABC138F] Coincidence
    https://www.luogu.com.cn/problem/AT_abc138_f对于\(x\ley\):若\(2x\ley\),则\(y-x>y\bmodx\)。若\(2x>y\),则\(y-x=y\bmodx\)。有\(x\oplusy\gey-x\)。当\(2x\ley\)时,不可能存在\(y\bmodx=x\oplusy\)了。现......
  • 题解:AT_abc372_f [ABC372F] Teleporting Takahashi 2
    https://www.luogu.com.cn/problem/AT_abc372_f简单易懂易写。考虑一步一步走。要么顺着环走,要么走那\(m\)条边。设\(id(k,i)=(i-1-k)\bmodn+1\)。设\(g_{k,id(k,i)}\)表示走了\(k\)步走到\(i\)的方案数。这样设计下标就不需要管顺着环走了。顺着环走......
  • 题解:CF843D Dynamic Shortest Path
    https://www.luogu.com.cn/problem/CF843DluoguRMJ加油.......如果每修改一次就dij复杂度\(O(q(n+m\logn))\)过不去的。暴力dij是因为值域很大需要用到堆,带个log,要是值域很小就可以直接分层BFS了……每次增加的边权很小,求最短路增量?设\(dis_i\)表示这次修......
  • 题解:AT_abc356_f [ABC356F] Distance Component Size Query
    https://www.luogu.com.cn/problem/AT_abc356_f前言纪念我场上WA8发没调出来,最后发现是1e18的问题。题目传送门:[ABC356F]DistanceComponentSizeQuery。不会线段树分治怎么办???那就用set+01-trie。思路一个联通块内的元素在值域上也是连续的,考虑维护一个联通快内......