首页 > 其他分享 >「ARC133E」Cyclic Medians 题解

「ARC133E」Cyclic Medians 题解

时间:2023-06-29 15:37:03浏览次数:48  
标签:方案 le frac 题解 Medians ARC133E ans ksm ll

本文网址:https://www.cnblogs.com/zsc985246/p/17513317.html ,转载请注明出处。

传送门

「ARC133E」Cyclic Medians

题目大意

给定 \(n,m,V,A\),你需要计算所有长为 \(n\)、值域为 \([1,V]\) 的整数序列 \(x\) 和长为 \(m\)、值域为 \([1,V]\) 的整数序列 \(y\) 形成的序列对 \((x_{1,2,\dots,n},y_{1,2,\dots,m})\) 的价值和。

序列对 \((x_{1,2,\dots,n},y_{1,2,\dots,m})\) 的价值由如下过程定义:

  • 令 \(a=A\)。
  • 从 \(0\) 到 \(nm-1\) 枚举 \(i\),每次让 \(a\) 变成 \((a,x_{(i \bmod n)+1},y_{(i \bmod m)+1})\) 的中位数。
  • 价值为 \(a\) 最后的值。

答案对 \(998244353\) 取模。

\(1 \le n,m \le 2 \times 10^5,1 \le A \le V \le 2 \times 10^5\)。

思路

套路:枚举 \(i\),统计中位数 \(> i\) 的方案数,加起来就是所有方案的中位数的总和。

我们可以枚举 \(i\),然后将 \(x\) 和 \(y\) 中所有 \(> i\) 的数设为 \(1\),\(\le i\) 的数设为 \(0\),统计中位数 \(> i\) 的方案数。

现在一次操作 \((a,x,y)\) 只有三种情况:\((a,0,0),(a,1,1),(a,0,1)\)。

如果是 \((a,0,0)\),那么 \(0 \to a\),如果是 \((a,1,1)\),那么 \(1 \to a\),否则 \(a\) 不变。

发现如果有 \(x=y\) 的操作,那么 \(a\) 的值就与 \(A\) 无关了。

所以我们把有 \(x=y\) 操作的情况和无 \(x=y\) 操作的情况分开算。

对于有 \(x=y\) 操作的情况,显然最后一次 \(x=y\) 操作会决定 \(a\) 最终的结果。

所以我们只需要统计最后一次 \(x=y\) 操作满足 \(x=y=1\) 的方案。

我们发现,因为我们的 \(x\) 和 \(y\) 是任意取,所以在 \(k=t\) 时某次操作 \(x=y=0\) 的方案数与 \(k=V-t\) 时这次操作 \(x=y=1\) 的方案数相等。也就是说,方案具有对称性。

所以我们只需要用总方案 \(V^{n+m}\) 减去无 \(x=y\) 操作的方案数,然后除以 \(2\) 就是 \(x=y=1\) 的方案。

现在考虑无 \(x=y\) 操作的情况。

思考发现,如果 \(\gcd(n,m)=1\),那么每个数 \(p \in [1,n]\) 都会正好与每个 \(q \in [1,m]\) 组成一次 \((a,x_p,y_q)\) 数对。

进一步发现,如果 \(\gcd(n,m)=g\),那么一个数 \(p=i_1+gt_1,i_1 \in [0,g),t_1 \in [0,\frac{n}{g})\) 只可能与所有数 \(q=i_2+gt_2,i_2 \in [0,g),t_2 \in [0,\frac{m}{g})\) 组成数对。

所以必须满足 \(\forall p,q,x_p \neq y_q\)。

拆开其实就是三个条件:

  • \(x_{i+g}=x_{i+2g}=\cdots=x_{i+(\frac{n}{g}-1)g}\);
  • \(y_{i+g}=y_{i+2g}=\cdots=y_{i+(\frac{m}{g}-1)g}\);
  • \(x_i \neq y_i\)。

那么分别计算 \((x_i,y_i)\) 取 \((0,1)\) 和 \((1,0)\),方案数为

\[k^{\frac{n}{g}}(V-k)^{\frac{m}{g}}+(V-k)^{\frac{n}{g}}k^{\frac{m}{g}} \]

因为 \(i \in [0,g)\),所以还需要再进行 \(g\) 次方。即

\[(k^{\frac{n}{g}}(V-k)^{\frac{m}{g}}+(V-k)^{\frac{n}{g}}k^{\frac{m}{g}})^g \]

然后将两种情况的答案加起来就做完了。时间复杂度 \(O(V \log(n+m))\)。

代码实现

#include<bits/stdc++.h>
#define ll long long
#define For(i,a,b) for(ll i=(a);i<=(b);++i)
const ll N=1e6+10;
using namespace std;
const ll p=998244353;
ll ksm(ll a,ll b){ll bns=1;while(b){if(b&1)bns=bns*a%p;a=a*a%p;b>>=1;}return bns;}

ll n,m,k,A;

int main(){
	scanf("%lld%lld%lld%lld",&n,&m,&k,&A);
	ll ans=ksm(k,n+m);
	ll g=__gcd(n,m);
	For(i,1,k-1){
		ll t=ksm((ksm(i,n/g)*ksm(k-i,m/g)+ksm(k-i,n/g)*ksm(i,m/g))%p,g);
		if(A>i)ans=(ans+t)%p;
		ans=(ans+(ksm(k,n+m)-t+p)*499122177)%p;//499122177是2在模998244353下的逆元
	}
	printf("%lld",ans);
	return 0;
}

尾声

如果你发现了问题,你可以直接回复这篇题解

如果你有更好的想法,也可以直接回复!

标签:方案,le,frac,题解,Medians,ARC133E,ans,ksm,ll
From: https://www.cnblogs.com/zsc985246/p/17513317.html

相关文章

  • Codeforces[CF1036B]Diagonal Walking v.2题解
    题目大意很明显,这道题就是求k步之内到达点\((a,b)\),然后尽量走对角线,求能走对角线的最大值。做题思路首先明白一个事实,即一个对角线可以通过增加一步而抵达点不变,如图:我们可以这样思考这道题,在到达目的地以后,剩余步数如果为双数,则在对角线来回走,最后会到目的地。但如果剩......
  • Switches and Lamps 题解
    题目传送门一道枚举题。首先我们需要知道什么开关才能被去掉,题目要求去掉这个开关后所有的灯依然能够开启。也就是说,这个开关能打开的所有灯都可以由其它开关代替。思路清晰了,就比较好做。我们可以用一个数组存储下每一盏灯可以被几个开关开启,如果有一盏灯只能被\(1\)个开关......
  • P1552 [APIO2012] 派遣 题解
    一、题目描述:给你一个$n$个点的有根树,每个点有两个参数$w$和$v$。再给出一个数$m$。对于每一个点$u$,设它的子树内最多可以选择$k_u$个点$a_1,a_2,...,a_{k_u}$,使得$\sum_{i=1}^kw_{a_i}\lem$。那么点$u$的价值为$v_u\timesk_u$,求$max(\su......
  • 前端打包部署后接口BASE_URL不对问题解决办法
    在前端打包部署时,为了免去不同环境打包的麻烦,项目用的流水线触发方式。在这里不细说,重点说说下面情况。当项目提交打包部署后,访问压测环境或者生产环境的地址来使用项目时,发现接口报错404。 在NETWORK里发现接口的BASEURL和当前环境需要调用的后端baseurl不同。主要问题在于......
  • 解密2.0题解
    解密题目首先查看题目的\(\LaTeX\)源代码,发现在答案后面有一个。可以点击。点击这个句号,来到线索\(1\)。线索\(1\):在源代码里发现有base64这个字眼,于是就把后面一长串的字符aW46MiAzCm91dDpKYXNvbmN3eCBjYW4ndCBBSyBDU1BK扔到base64解密。解密得出:in:23out:Jasoncwx......
  • CF1834 题解
    CF1834题解A考虑答案与元素位置无关,只与\(1\)和\(-1\)的个数有关。要求\(1\)必须多于或等于\(-1\),并且\(-1\)个数为偶数。分讨:序列中\(num(1)\geqnum(-1)\),只需要看\(num(-1)\)正负性,奇数1步,偶数0步序列中\(num(1)<num(-1)\),先通过\(-1\)变\(1\)将数目补到第一种情况,再做......
  • mac打开ddms卡住的问题解决
    https://blog.csdn.net/qq_35244415/article/details/110656444?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-110656444-blog-88994745.235^v38^pc_relevant_default_base&depth_1-utm_source=distribute.......
  • P4630 [APIO2018] 铁人两项 题解
    一、题目描述:给你一个$n$个点,$m$条边的无向图。图不一定联通求出点对$(u,c,v)$的数量,使得点$u$存在一条经过点$c$到达点$v$的无向图。数据范围:$1\len\le1\times10^5,1\lem\le2\times10^5$ 二、解题思路:算是圆方树比较模板的题了......
  • B0626 模拟赛题解
    原题链接前言重庆一位金牌大佬出的。感受:除了最后一题,感觉难度不如C组,甚至没之前D组题难?T1浪费2.5h,最后还是打表秒了。T2想出正解,但发现是数据结构题,最后40min怒打100行,差点打出正解。T3花20min打出20分部分分,赛后发现XD秒了(tql)。T4看题浪费5min......
  • vue3引入bootstrap5的折叠菜单无效问题解决
    问题:通过npm后者yarn安装bootstrap5后,在入口文件全局引入bootstrap5的js、scc,在vue组件引入折叠功能,点击可以正常展开,在点击无法收回解决办法:可参考网上博主的建议,大概意思就是之前引入的js文件不对,导致收回方法没有执行import'bootstrap/dist/js/bootstrap.bundle'main入口......