首页 > 其他分享 >luogu P5326 [ZJOI2019]开关

luogu P5326 [ZJOI2019]开关

时间:2023-02-01 19:45:20浏览次数:73  
标签:P5326 frac limits luogu sum ZJOI2019 using ll define

题面传送门

直接优化高斯消元似乎不是很可做,可以换一种思路。

我们先来考虑一个弱化版的问题:求某个时刻为当前局面的答案。

这个东西长得一脸指数生成函数,不妨列出来,设\(F_i\)为\(i\)号灯的生成函数,其中\(F_i[x_j]\)表示\(i\)号灯被操作\(j\)次的方案。

先来考虑\(s_i=0\),不妨设\(P=\sum p_i\)则

\[F_i=\sum\limits_{i=0}^{\infty}{\frac{(\frac{p_i}{P}x)^{2i}}{(2i)!}}=\frac{e^{\frac{p_i}{P}x}+e^{-\frac{p_i}{P}x}}{2} \]

\(s_i=1\)的情况类似,可以整合为

\[F_i=\frac{e^{\frac{p_i}{P}x}+(-1)^{s_i}e^{-\frac{p_i}{P}x}}{2} \]

那么这个弱化版答案的生成函数就是所有\(F_i\)乘起来。

再考虑这个问题,即第一次得到答案的时刻。我们发现如果再求出生成函数\(H\)表示某个时刻为全\(0\)的概率,记答案的生成函数为\(G\),则有\(GH=F\),具体原因就是考虑从第一次不断重复\(0\)的过程。因此我们求的就是\(\frac{F}{H}\)。

再考虑答案,容易发现就是\((\frac{F}{H})'(1)=\frac{F'(1)H(1)-F(1)H'(1)}{H(1)^2}\)。

先暴力\(O(nP)\)背包求出\(F\)每一项的系数设为\(a\),然后你发现这个无穷的还带\(e\)似乎不好求某个点的值。

先考虑去掉\(e\),将其化成普通生成函数:

\[F=\sum\limits_{i=-P}^P{a_ie^{\frac{i}{P}x}}\\ =\sum\limits_{i=-P}^P{a_i\sum\limits_{j=0}^{\infty}{\frac{i^j}{P^jj!}x^j}}\\ f=\sum\limits_{i=-P}^P{a_i\sum\limits_{j=0}^{\infty}{(\frac{i}{P})^jx^j}}\\ =\sum\limits_{i=-P}^P{\frac{a_i}{1-\frac{i}{P}x}}\\ \]

现在项数是有限了,但是在\(x=1\)处的取值还是没有……

因为这个是除法,所以可以上下同时乘上\((1-x)\),有

\[(1-x)f=\sum\limits_{i=-P}^P{\frac{a_i(1-x)}{1-\frac{i}{P}x}}\\ =a_P+\sum\limits_{i=-P}^{P-1}{\frac{a_i(1-x)}{1-\frac{i}{P}x}}\\ (1-x)f(1)=a_P\\ ((1-x)f)'(1)=\sum\limits_{i=-P}^{P-1}\frac{a_i}{\frac{i}{P}-1} \]

然后再对\(H\)做同样的事情就可以算答案了。

#include<bits/stdc++.h>
#define Gc() getchar() 
#define Me(x,y) memset(x,y,sizeof(x))
#define Mc(x,y) memcpy(x,y,sizeof(x))
#define d(x,y) ((m)*(x-1)+(y))
#define R(n) (rnd()%(n)+1)
#define Pc(x) putchar(x)
#define LB lower_bound
#define UB upper_bound
#define PB push_back
using ll=long long;using db=double;using lb=long db;using ui=unsigned;using ull=unsigned ll;
using namespace std;const int N=1e2+5,M=1e5+5,K=2e3+5,mod=998244353,Mod=mod-1;const db eps=1e-9;const int INF=1e9+7;mt19937 rnd(time(0));
int n,m,k,x,y,z,A[N],B[N],P,C[N];ll f[M],g[M];
ll mpow(ll x,int y=mod-2){ll Ans=1;while(y) y&1&&(Ans=Ans*x%mod),y>>=1,x=x*x%mod;return Ans;}
#define fi first
#define se second
pair<ll,ll> calc(int *A){
	int i,j;Me(f,0);f[P]=1;for(i=1;i<=n;i++){
		Mc(g,f);Me(f,0);for(j=B[i];j<=2*P;j++) f[j]=g[j-B[i]];
		for(j=0;j<=2*P-B[i];j++) f[j]=(f[j]+(A[i]?mod-g[j+B[i]]:g[j+B[i]]))%mod;
	}
	pair<ll,ll> Ans;Ans.fi=f[2*P];for(i=0;i<2*P;i++) Ans.se+=f[i]*P%mod*mpow(mod-2*P+i)%mod;Ans.se%=mod;return Ans;
}
int main(){
	freopen("switch.in","r",stdin);freopen("switch.out","w",stdout);
	int i,j;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&A[i]);for(i=1;i<=n;i++) scanf("%d",&B[i]),P+=B[i];
	auto p1=calc(A),p2=calc(C);
	printf("%lld\n",(p1.se*p2.fi+(mod-p1.fi)*p2.se)%mod*mpow(p2.fi*p2.fi%mod));
}

标签:P5326,frac,limits,luogu,sum,ZJOI2019,using,ll,define
From: https://www.cnblogs.com/275307894a/p/17083972.html

相关文章

  • Luogu P4145 上帝造题的七分钟 2 / 花神游历各国 题解
    Luogu链接:上帝造题的七分钟2/花神游历各国${\scr\color{Orchid}{\text{Solution}}}$题目大意支持两种操作:区间开方(向下取整)区间求和分析发现线段树容易实......
  • 算法:线段树&&Luogu p3372题解
    前言不愧是线段树,竟然卡我这么久,还是那句话:十年OI一场空,不开longlong见祖宗#1什么是线段树?线段树长什么样?通俗一点,线段树就是线段,树。实际上,线段树是一棵完全......
  • 【luogu P5395】第二类斯特林数·行(容斥)(NTT)
    第二类斯特林数·行题目链接:luoguP5395题目大意第二类斯特林数是把n个不同元素放入m个相同的集合中,保证每个集合非空的方案数。给你n,对于0~n的每个m都求第二......
  • Luogu P8773 [蓝桥杯 2022 省 A] 选数异或
    https://www.luogu.com.cn/problem/P8773因为\(a\texttt{xor}b=c\)则\(a\texttt{xor}c=b\),对于\(a_i\)找到\(a_i\texttt{xor}x\)离其最近的位置,放在ST......
  • Luogu P8710 [蓝桥杯 2020 省 AB1] 网络分析
    https://www.luogu.com.cn/problem/P7191发现一个性质:最多只会合并\(n-1\)次(类似树只有\(n-1\)条边)。于是在合并的时候暴力统计即可。时间复杂度\(O(n^2+m)\)。......
  • 关于AC自动机的一些理解 || Luogu3121 & 4824 Censoring - 哈希 - AC自动机
    题目链接:https://www.luogu.com.cn/problem/P3121(4824)题解:4824是CensoringS,只需要对单模式串进行操作,3121需要对多模式串4824开一个前缀hash数组,每次扫到当前点......
  • Luogu P7191 [COCI2007-2008#6] GRANICA
    https://www.luogu.com.cn/problem/P7191设\(\bmodm=r\),则能得到\(a_i=x_i\timesm+r\)。那么对于相邻的两个数\(a_i,a_{i-1}\)相减,就能得到\((x_i-x_{i-1})\time......
  • luogu P1452 题解
    管理备注:虽然此题解为乱搞,但是本乱搞是非常有意义的经典乱搞,故保留在题解区中供学习与参考。我们充分发扬人类智慧:将所有点全部绕原点旋转同一个角度,然后按\(x\)坐标......
  • luogu P8207 题解
    在暴力建边的情况下可以kruskal求生成树。但是这样是\(O(n^2)\)的。因为\(lcm(x,y)=x\timesy/\gcd(x,y)\)。所以\(\gcd(x,y)\)越大我们的答案越优。但是......
  • 【luogu AGC031E】Snuke the Phantom Thief(网络流)
    SnukethePhantomThief题目链接:luoguAGC031E题目大意有n个特殊点分布在二维平面上,每个点有坐标和价值。你要选一些点,总价值是你选的点的价值和。然后有一些约束,......