开 始 想 用 模 拟 , 但 是 w a 19 开始想用模拟,但是wa19 ,wa19

用 概 率 d p 可 以 很 清 晰 的 解 决 这 个 问 题 用概率dp可以很清晰的解决这个问题 dp

定 义 f [ i ] [ 0 ] 为 [ 1 , i ] 时 a 串 等 于 b 串 的 情 况 定义f[i][0]为[1,i]时a串等于b串的情况 f[i][0][1,i]ab

f [ i ] [ 1 ] 为 [ 1 , i ] 时 a 串 大 于 b 串 的 情 况 f[i][1]为[1,i]时a串大于b串的情况 f[i][1][1,i]ab

最 后 的 答 案 就 是 f [ n ] [ 1 ] 总 情 况 最后的答案就是\frac{f[n][1]}{总情况} f[n][1]

由 于 转 移 情 况 太 多 , 这 里 只 举 一 个 例 子 \color{Red}由于转移情况太多,这里只举一个例子 ,

当 a [ i ] = = 0 且 b [ i ] ! = 0 时 当a[i]==0且b[i]!=0时 a[i]==0b[i]!=0

f [ i ] [ 1 ] = f [ i − 1 ] [ 1 ] ∗ m + f [ i − 1 ] [ 0 ] ∗ ( m − b [ i ] ) f[i][1]=f[i-1][1]*m+f[i-1][0]*(m-b[i]) f[i][1]=f[i1][1]m+f[i1][0](mb[i])

啥 意 思 ? 啥意思? ?

前 面 赢 了 , 这 次 m 个 数 字 随 便 选 , 就 是 f [ i − 1 ] [ 1 ] ∗ m 前面赢了,这次m个数字随便选,就是f[i-1][1]*m ,m便,f[i1][1]m

前 面 平 局 , 则 选 ( m − b [ i ] ) 个 数 字 使 得 比 b [ i ] 大 , 就 是 f [ i − 1 ] [ 0 ] ∗ ( m − b [ i ] ) 前面平局,则选(m-b[i])个数字使得比b[i]大,就是f[i-1][0]*(m-b[i]) ,(mb[i])使b[i],f[i1][0](mb[i])

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod=1e9+7;
const int maxn=1e5+10; 
int n,m,a[maxn],b[maxn],ans,f[maxn][2];
int quick_pow(int x,int n)
{
	int ans=1;
	while( n )
	{
		if( n&1 )	ans=ans*x%mod;
		x=x*x%mod;
		n>>=1;
	}
	return ans;
}
signed main()
{
	cin >> n >> m;
	for(int i=1;i<=n;i++)	cin >> a[i];
	for(int i=1;i<=n;i++)	cin >> b[i];
	f[0][0]=1;//相等的种数 
	int all=0;
	for(int i=1;i<=n;i++)
	{
		if( a[i]==0 )	all++;
		if( b[i]==0 )	all++;
		if( a[i]&&b[i] )
		{
			if( a[i]==b[i] )
				f[i][1]=f[i-1][1],f[i][0]=f[i-1][0];
			else if( a[i]>b[i] )
				f[i][1]=( f[i-1][0]+f[i-1][1] )%mod;
			else//a[i]<b[i]
				f[i][1]=f[i-1][1];//那么获胜的概率只能从前面继承 
		}
		else if( a[i]==0&&b[i]==0 )
		{
			f[i][1]=f[i-1][1]*m%mod*m%mod+f[i-1][0]*(m*(m-1)/2%mod)%mod;
			f[i][0]=f[i-1][0]*m%mod;
		}
		else if( a[i]==0 )
		{
			f[i][1]=f[i-1][1]*m%mod+f[i-1][0]*(m-b[i])%mod; //胜利 
			f[i][0]=f[i-1][0];
		}
		else if( b[i]==0 )
		{
			f[i][0]=f[i-1][0];
			f[i][1]=f[i-1][1]*m%mod+f[i-1][0]*(a[i]-1)%mod;
		}
		f[i][0]%=mod,f[i][1]%=mod;
	}
	cout << f[n][1]*quick_pow( quick_pow(m,all),mod-2 )%mod;
}