JZOJ6812. 【2020.10.05提高组模拟】战争

Description

在这里插入图片描述
在这里插入图片描述

  • n ≤ 4 e 7 , a i ≤ 1 e 18 n\le4e7,a_i\le1e18 n4e7,ai1e18

Solution

  • 神仙函数(构造)题。
  • 首先这种题目可以归为一类:中间的步骤完全随机,求起始状态到终止状态的期望步数。
  • 相应的也有一般的解法,构造一个势能函数,使它的增量是一个定值,终止状态唯一对应函数的一个最值,那么设终止状态 T T T,起始状态 S S S,状态 s s s势能函数 F ( s ) F(s) F(s),增量 Δ \Delta Δ,那么期望步数 E ( S ) = F ( T ) − F ( S ) Δ E(S)=\frac{F(T)-F(S)}{\Delta} E(S)=ΔF(T)F(S)
  • 通过构造,这题的函数设为 F ( S ) = ∑ ( 1 p a i − 1 p ) , S = [ a 1 , a 2 , a 3 . . . ] F(S)=\sum(\frac{1}{p^{a_i}}-\frac{1}{p}),S=[a_1,a_2,a_3...] F(S)=(pai1p1),S=[a1,a2,a3...],可以求出转移的 Δ \Delta Δ与选择的两个国家无关,为 ( 2 p − 2 ) (\frac{2}{p}-2) (p22)
  • 有点卡常.
#pragma GCC optimize(2)
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define ll long long 
#define ull unsigned long long 
#define mo 1000000007
#define maxm 100005
using namespace std;

int T,n,i,j,k;
ll p,s,t,a,ans,ans0,invp,sum,q[maxm],l[maxm],r[maxm];
ull m,x,y,z,b1,b2,b3;

ll ksm(ll x,ll y){
    
    
	ll s=1;
	for(;y;y/=2,x=x*x%mo) if (y&1)
		s=s*x%mo;
	return s;
}

void read(ll &x){
    
    
	x=0; char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
}

ll f1[maxm],f2[maxm],B;
void prepare(){
    
    
	B=sqrt(mo)+1,f1[0]=1,f2[0]=1;
	for(int i=1;i<=B;i++) f1[i]=f1[i-1]*invp%mo;
	for(int i=1;i<=B;i++) f2[i]=f2[i-1]*f1[B]%mo;
}

int main(){
    
    
	scanf("%d%d%lld%lld",&T,&n,&s,&t),p=ksm(t,mo-2)*s%mo;
	invp=ksm(p,mo-2);
	prepare();
	if (T==0) for(i=1;i<=n;i++) {
    
    
		read(a);
		a%=mo-1;
		ans+=f1[a%B]*f2[a/B]%mo-invp;
		sum+=a;
	}else {
    
    
		scanf("%llu%llu%llu%llu%llu%llu",&m,&x,&y,&z,&b1,&b2);
		for(i=1;i<=m;i++) read(q[i]),read(l[i]),read(r[i]);
		for(i=1;i<=m;i++){
    
    
			ll L=l[i],R=r[i];
			for(j=q[i-1]+1;j<=q[i];j++){
    
    
				if (j==1) a=b1%(R-L+1)+L; else 
				if (j==2) a=b2%(R-L+1)+L; else 
					b3=b2*x+b1*y+z,a=b3%(R-L+1)+L,b1=b2,b2=b3;
				a%=mo-1;
				ans+=f1[a%B]*f2[a/B]%mo-invp;
				sum+=a;
			}
		}
	}
	printf("%lld\n",((ksm(invp,sum)-invp-ans)%mo*ksm(2*invp-2,mo-2)%mo+mo)%mo);
}

猜你喜欢

转载自blog.csdn.net/qq_43649416/article/details/108933564