首页 > 其他分享 >七星闪耀的明日

七星闪耀的明日

时间:2023-06-04 10:44:07浏览次数:31  
标签:qr Mat int 明日 len 七星 闪耀 ql mod

T1 jump

考虑 \(dp\),记录两条路径中相邻的位置,以及用过的 \(A\) 的次数差。
考虑 \(A\) 的种类数不会很多,根据裴蜀定理,合法的解一定是一个特解加上若干 \(lcm(A,B)\),考虑把 \(A,B,n\) 都除以 \(gcd(A,B)\),因为这些点不可能跳到。那么\(lcm(A,B)=A*B\),也就是说,暴力的复杂度是 \(O(nB\frac{n}{AB})=O(n^2/A)\)

T2 graph

考虑没有 \(l,r\) 的情况。
考虑一个暴力,\(f_{t,i}\) 表示跳了 \(t\) 步位于位置 \(i\) 的路径条数,可以发现,如果往后跳 \(m\) 步,那么 \(f_{t,i}\) 对 \(f_{t+m,j}\) 的贡献系数为 $1+[i=j] $ 。
这也就是说,如果每次跳 \(m\) 步,任意时刻全局只有一个时刻和别的不一样,
最后的 \(n\% m\) 步可以考虑一个数跳任意步可以到的数(不取模)是一段区间,那么取模之后就是连续的了,贡献可以 \(O(1)\) 计算。

接下来考虑有 \([l,r]\) 的情况,这等价于:对于每个 \(x\),先算出走 \(x\) 步到每个点的方案数,然后保留点位于 \([l,r]\) 的方案数,在以这个为初始值乘上到终点的路径数。

我们把这个过程分成前半部分和后半部分,前半部分可以用先暴力跳\(x\% m\) 步,再跳 \(x/m\) 个 \(m\)。
根据上面的过程可以得知,跳完 \(x\%m\) 步之后,方案数一定是,某一段区间和其他不一样。并且跳 \(x/m\) 不改变这个区间,且这个区间是什么只和 \(x\% m\) 有关。

在跳到 \(x\) 之后,\(dp\) 数组会被 \([l,r]\) 划分成最多三个区间 \([l_i,r_i]\) 满足每个区间内的 \(dp\) 值是相等的。接着,我们每次跳 \(m\) 步,特殊区间是不变的,最后的若干步暴力跳。

我们考虑枚举 \(x\%m\),然后对于被划分出来的每个区间 \([l_i,r_i]\) 单独计算答案。

记录 \(f[i][2]\) 表示考虑了前\(i\) 步,是否已经走到 \(x\) 的方案数,以及 \(add\) 表示已经走到 \(x\) 的所有方案的特殊区间比普通区间的增量的和。

可以用矩阵乘法计算,复杂度 \(O(Tm4^3\log n)\)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int n,m,l,r,s,t;
const int mod = 998244353;
int Ans[4],Mat[4][4],Tmp[4][4];
inline int mul(int x,int y){return 1ll*x*y%mod;}
inline int add(int x,int y){return (x+y>=mod?x+y-mod:x+y);}
inline int sub(int x,int y){return (x-y<0?x-y+mod:x-y);}
void Mul1()
{
	for(int k=0;k<4;k++)
	for(int i=0;i<4;i++)
	for(int j=0;j<4;j++)
	Tmp[i][j]=(Tmp[i][j]+1ll*Mat[i][k]*Mat[k][j]%mod)%mod;
	for(int i=0;i<4;i++)
	for(int j=0;j<4;j++)
	Mat[i][j]=Tmp[i][j],Tmp[i][j]=0;
}
void Mul2()
{
	for(int k=0;k<4;k++)
	for(int j=0;j<4;j++)
	Tmp[0][j]=(Tmp[0][j]+1ll*Ans[k]*Mat[k][j]%mod)%mod;
	for(int k=0;k<4;k++)
	Ans[k]=Tmp[0][k],Tmp[0][k]=0;
}
void Pow(int K)
{
	while(K)
	{
		if(K&1)Mul2();
		Mul1();
		K>>=1;
	}
}
//K:[Odd,New,Add,1] [1,    len,    1,  0]->[Odd,New,Add,1]
//              	[0,    1,      0   0]
//             		[0,    len,    1   0]
//             		[K*len,0?K*len,0?K,1]
int calc(int ql,int qr,int D,int M,int t)
{
	LL L=((LL)ql<<D),R=((LL)qr<<D)+(1ll<<D)-1;
	LL res=R/M+(R%M>=t);
	if(L)
	{
		L--;
		res-=L/M+(L%M>=t);
	}
	return res%mod;
}
int ans=0;
void gener(int M,int ql,int qr,int L,int B,int K,int opt,int rem)
{
	//printf("gener(%d,%d,%d,%d)\n",ql,qr,L,B);
	L=(L%mod+mod)%mod;
	int len=((qr-ql+1)%mod+mod)%mod;
	K=(K%mod+mod)%mod;
	//2^m-1,li-ri+1,r-l+1,opt
	Ans[0]=B;   Ans[1]=0;   Ans[2]=add(B,mul(K,opt));   Ans[3]=1;
	Mat[0][0]=M+1; 		Mat[0][1]=0;	Mat[0][2]=M+1;		Mat[0][3]=0;
	Mat[1][0]=0;		Mat[1][1]=M+1;	Mat[1][2]=0;		Mat[1][3]=0;
	Mat[2][0]=0;		Mat[2][1]=len;	Mat[2][2]=1;		Mat[2][3]=0;
	Mat[3][0]=mul(K,L); Mat[3][1]=0;	Mat[3][2]=mul(K,L); Mat[3][3]=1;
	if(opt==1) Mat[3][2]=add(Mat[3][2],K);
	Pow(rem/m);
	rem%=m;
	//cout<<Ans[1]<<' '<<Ans[2]<<endl;
	ans=(ans+1ll*Ans[1]*calc(0,M-1,rem,M,t)%mod)%mod;
	ans=(ans+1ll*Ans[2]*calc(ql,qr,rem,M,t)%mod)%mod;
}
void solve()
{
	scanf("%d %d %d %d %d %d",&n,&m,&s,&t,&l,&r);
	ans=0;
	int M = (1<<m)-1;
	int res=0;
	for(int R=0;R<m&&R<=n;R++)
	{
		LL vl=((LL)s<<R),vr=vl+(1ll<<R)-1;
		int W=(vr/M-vl/M+mod)%mod;
		//printf("vl=%d,vr=%d\n",vl,vr);
		if(vl%M<=vr%M)
		{
			int ql=vl%M,qr=vr%M;
			if(l<ql) gener(M,l,min(ql-1,r),qr-ql+1,W,1,0,n-R);
			if(r>qr) gener(M,max(qr+1,l),r,qr-ql+1,W,1,0,n-R);
			if(r>=ql&&l<=qr) gener(M,max(ql,l),min(qr,r),qr-ql+1,W,1,1,n-R);
		}
		else if(vr%M+1<=vl%M-1) 
		{
			int ql=vr%M+1,qr=vl%M-1;
			if(l<ql) gener(M,l,min(ql-1,r),qr-ql+1,W,-1,0,n-R);
			if(r>qr) gener(M,max(qr+1,l),r,qr-ql+1,W,-1,0,n-R);
			if(r>=ql&&l<=qr) gener(M,max(ql,l),min(qr,r),qr-ql+1,W,-1,1,n-R);
		}
		else gener(M,l,r,M,0,W,1,n-R);	
		//cout<<R<<' '<<ans<<endl;
	}
	printf("%d\n",ans);
}
int main()
{
	freopen("graph.in","r",stdin);
	freopen("graph.out","w",stdout);
	int T;
	cin>>T;
	while(T--)
	{
		solve();
	}
	return 0;
}

标签:qr,Mat,int,明日,len,七星,闪耀,ql,mod
From: https://www.cnblogs.com/jesoyizexry/p/17455314.html

相关文章

  • 万象更新,精妙绝伦华为Mate X3通联七星至臻旗舰高端品鉴会
    在哈尔滨斯大林公园内的松花江畔,有一座绿树掩映中非常特别的欧式建筑。从外表上看,这个构思巧妙的建筑具有西伯利亚式风格。木栅栏似的大门朝向东方,拥有一个橘红色的尖塔。古朴典雅精巧别致的亭台楼阁,吸引着游人的眼球。著名作家阿成先生在他的著作《远东背影》中这样描绘铁路江上俱......
  • 明日方舟孤星语录
    正因为触不可及,天空才是湎于幻想之人的归宿。天空被撕开一角,真相呈现在了所有人面前,我们没有理由忽视它。但即使所有人都抬起了头,也不意味着脚下的问题就会消失不见。对于科学而言,现有认知体系被颠覆的那一刻,前进的脚步不会因此中断,反而会加速。也许人类的命运确实会系在一个......
  • P8446 虹色的北斗七星 题解
    传送门前言:很久之前做的一道题目了,当时并没有想出来怎么做,随便猜了个结论交上去发现过了。(好像还是第一道自己做出来的绿)简要题意:你有一个长度为\(n\)的序列\(a\),一个区间\([l,r]\)的价值定义为当前区间的极差减去区间长度,求出最大的价值。\(Solution\):看了看题解,发现......
  • 手游(明日方舟)营收与社区动态评论关系分析
    importpandasaspdimportnumpyasnpimportmatplotlibasmpfrompandas.core.algorithmsimportSelectN,diffimportseabornassefrommatplotlibimportpyplotaspltimportwordcloudimportjiebaimportloggingfromPILimportImage##设置中文plt.rcPa......
  • 十二载征程犹未止,看今朝星光尽闪耀丨万字长文回顾2023数据技术嘉年华
    4月8日下午,为期两天的第十二届数据技术嘉年华(DTC2023)在北京新云南皇冠假日酒店圆满落下帷幕。大会得到了工业和信息化部电子五所的支持和指导,围绕“开源·融合·数字化——引领数据技术发展,释放数据要素价值”这一主题,通过一场主论坛和十二场专题论坛,汇聚“产学研”各界数据技术......
  • “典则俊雅,若如初见”通联七星&富力江湾华为P60——俯瞰松花江畔
    松花江江水清夜来雨过春涛声浪花叠锦绣縠明近日,七星手机连锁&华为公司开展“典则俊雅,若如初见”系列主题活动。本次活动邀约富力江湾平层高级VIP业主以及聆汀livehouse沉浸式音乐酒吧高端会员,通过航拍俯视整个哈尔滨江南和江北,把现代科技与,在活动中感受哈尔滨高270米的主塔,共同鉴证......
  • “亘古通今日臻完美”联通七星&中央大街华为P60—百年显风情
    中央大街是哈尔滨的缩影,哈尔滨的独特建筑文化和哈尔滨人的欧式生活,都在这里明显的体现,它,被誉为“亚洲第一街”。近日,七星手机连锁&华为公司开展“亘古通今,日臻完美”系列主题活动。本次活动邀约哈尔滨中央大街商会会员,黑龙江画家协会的客户,把现代最高科技与百年中央大街文化相结合,......
  • “往后余生探索未来”通联七星&俄罗斯领事馆原址MateX3浪漫约会
    一座城市的建筑,就是这座城市的历史,也是这座城市整体文化的代表和象征......近日,七星手机连锁东区联合华为开展主题为“往后余生,探索未来”的MateX3系列活动,把现代科技与俄式领事馆建筑群联合,在活动中体验百年俄式建筑群和最新现代最高科技的完美贴合。在活动现场,花粉们竞相互动,通过......
  • 【北斗七星】北斗卫星授时之星解读与应用
    【北斗七星】北斗卫星授时之星解读与应用【北斗七星】北斗卫星授时之星解读与应用京准电子科技官微——ahjzsz说起北斗卫星导航系统,大多数人可能都知道它的导航定位功能......
  • 数数的群星闪耀时
    科技博客里都有,这里主要是个杂题乱做。常用简单技巧:多条件至少满足一个直接容斥。至少和恰好直接二项式反演。组合意义,组合意义。生成函数直接上。别组合魔怔了,可以......