首页 > 其他分享 >CF935D Fafa and Ancient Alphabet 题解

CF935D Fafa and Ancient Alphabet 题解

时间:2024-03-07 22:25:55浏览次数:41  
标签:qpow Alphabet int 题解 inv re ans Fafa ll

讲一个很暴力的方法(为描述方便,下文 \(a\) 数组代表 \(s1\),\(b\) 数组代表 \(s2\))。

发现假如当前 \(a_i\ne b_i\),就不需要再向下枚举了,于是拥有了分类讨论的雏形。

我们设 \(inv\) 代表进行到这一步的概率,可分为以下四种情况:

  1. \(a_i>0,b_i>0\)。此时假如 \(a_i=b_i\),略过;若 \(a_i>b_i\),\(ans+=inv\),退出循环;否则直接退出循环。
  2. \(a_i>0,b_i=0\)。此时只需考虑确定的可增加概率和 \(inv\)。易得 \(inv=\frac{inv}{m},ans+=(a_i-1)inv\)。
  3. \(a_i=0,b_i>0\)。\(inv=\frac{inv}{m},ans+=(m-b_i)inv\)。
  4. \(a_i=0,b_i=0\)。\(ans+=\frac{m(m-1)}{2m^2}inv,inv=\frac{inv}{m}\)。

都是在 \(\mod p\) 意义下的。时间复杂度 \(O(n\log_2n)\),预处理一些快速幂可优化至 \(O(n)\)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=1e9+7;
const int N=1e5+5;
ll qpow(ll x,int y){
	ll re=1;
	while(y){
		if(y&1) re=re*x%p;
		x=x*x%p;
		y>>=1;
	}return re;
}int n,a[N],b[N];
ll ans,inv=1,m;
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	for(int i=1;i<=n;i++)
		cin>>b[i];
	for(int i=1;i<=n;i++){
		if(a[i]&&b[i]){
			if(a[i]==b[i])
				continue;
			if(a[i]>b[i])
				ans=(ans+inv)%p;
			break;
		}if(!a[i]&&!b[i]){
			ans=(ans+m*(m-1)%p*qpow(m*m*2%p,p-2)%p*inv%p)%p;
			inv=inv*qpow(m,p-2)%p;
		}else if(!a[i]){
			inv=inv*qpow(m,p-2)%p;
			ans=(ans+(m-b[i])*inv%p)%p;
		}else{
			inv=inv*qpow(m,p-2)%p;
			ans=(ans+(a[i]-1)*inv%p)%p;
		}
	}cout<<ans;
	return 0;
}

标签:qpow,Alphabet,int,题解,inv,re,ans,Fafa,ll
From: https://www.cnblogs.com/chang-an-22-lyh/p/18059903/cf935d-tj

相关文章

  • [HDU6647] Bracket Sequences on Tree 题解
    [HDU6647]BracketSequencesonTree题解一道纯靠自己推出来的换根\(dp+\)树哈希,写篇题解庆祝一下~~题意:给定一棵无根树,你可以任意选择根节点和遍历顺序,每次遍历时进入一个节点就标记一个(,离开一个节点就标记一个),问所有存在的括号序列有多少种,对998244353取模。先考虑根固......
  • CF contest 1935 Round 932 (Div. 2) A-D题解
    CodeforcesRound932(Div.2)A-D题解CodeforcesRound932(Div.2)绪言很菜,AB速度慢,卡在C,想DP,但是时间优化不下来,说服自己\(2\times10^3\)能过\(n^3\),D稍微简单,但是没看D,遂掉分。A.EntertainmentinMAC给你一个字符串\(s\)和一个偶整数\(n\)。你可以对它进行两种运......
  • 【教程】 iOS构建版本无效问题解决方案
     引言在进行iOS应用上架时,有时会遇到构建版本无效的问题,即通过XCode上传成功后,但在AppStoreConnect的TestFlight中无法显示构建版本,或者显示一会儿后就消失了。本文将介绍可能的原因分析,并提供解决问题的方法。问题描述最近一次上传新版本至AppStore后,发现在AppStoreCon......
  • [ARC157F] XY Ladder LCS 题解
    我们尝试给这个抽象题来一篇题解。思考过程还是很重要的。首先看了这个题,一看数据范围\(n\le50\),然后就不懂了,你告诉我这玩意可以状压??然后我们一顿乱想,发现如果\(n\)除以一个\(3\),那我们是不是就可以状压了。那怎么除以\(3\)呢。接着我们手玩一下样例,发现似乎这个答案......
  • [青少年CTF训练平台]web部分题解(已完结!)
    文章管理系统首先打开环境(>ω<。人)ZZz♪♪既然要做题,就要做全面了,图上说了,既然有假flag我就先找出来:假flag:打开vmware,使用sqlmap进行处理:sqlmap-uhttp://challenge.qsnctf.com:31645/?id=1--dbs记得中间的url换成自己的看到了六个可能:{*]ctftraining[*]information......
  • CF1353E K-periodic Garland 题解
    分析考虑DP。定义状态函数\(f_i\)表示处理完前\(i\)个字符且第\(i\)个字符为\(1\)时的最小代价。则对于\(i\),有两种情况:\(i\)不是第一个\(1\),则上一个\(1\)的位置必定为\(i-k\)。\(i\)是第一个\(1\),没有上一个\(1\)。得到转移方程:\(f_i=\min(f_{\max(......
  • P10120『STA - R4』冰红茶 题解
    分析出得很好,模板套模板,希望下次再来。难点在于维护最后连续喝的DS饮料数量。设这次喝原味饮料的区间为\([l,r]\),上一次为\([l',r']\)。则有两种情况:\([l,r]\)与\([l',r']\)不相交。如:在\([l',r']\)和\([l,r]\)两个区间中的DS连续喝的同种饮料数量都会变成\(k......
  • AT_abc343_f [ABC343F] Second Largest Query 题解
    分析考虑乱搞。对于求次大值,用线段树维护就行了。记录下每个区间的最大、次大值。则两个子区间的父区间的最大值就是这四个最大的,次大值就是这四个次大的。复杂度\(O(\logn)\)。求次大值的出现次数,乱搞就行了。因为带修,带修莫队或者分块有些麻烦。其实用线段树就行。在维护区......
  • P8058 [BalkanOI2003] Farey 序列 题解
    分析考虑二分答案。对于当前二分的答案\(x\),设\(cnt\)表示Farey序列中\(\frac{p}{q}\lex\)的满足条件的数量。对于一组\((i,j)\),若\(\frac{j}{i}\lex\),则\(j\le\lfloori\timesx\rfloor\)。得到暴力式子:\[cnt=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{\lfloo......
  • P9989 [Ynoi Easy Round 2023] TEST_69 题解
    分析考虑线段树。\(20\)分统计节点懒标记,在每次询问之前统一下传\((lst,i-1)\)的修改懒标记,\(lst\)是上一次询问的位置。\(40\)分在统一下传的过程中打标记,如果当前节点的某个儿子所在子树中没有需要下传懒标记的节点,则不更新那个儿子的内容。\(70\)分注意到\(a\)......