首页 > 其他分享 >洛谷 P5175 数列 题解

洛谷 P5175 数列 题解

时间:2024-10-16 14:32:39浏览次数:1  
标签:node 洛谷 题解 P5175 a1 awa res qwq mod

纯纯数学题。

看到 \(n\le 10^{18}\) 不难想到矩乘,但是 \(\log_2 10^{18} \approx 60\),再加上 \(T=30000\) 的多测,运算量已经来到了 \(1.8 \times 10^6\),所以我们最多有一个 \(\sqrt[3]{\frac{1.5\times 10^8}{6 \times 10^6}} \approx 4\) 的矩阵。

\[\because a_i=xa_{i-1}+ya_{i-2} \]

\[\therefore {a_i}^2=(xa_{i-1}+ya_{i-2})^2=x^2{a_{i-1}}^2+y^2{x_{i-2}}^2+2xya_{i-1}a_{i-2} \]

\[\therefore a_{i}a_{i-1}=a_{i-1}(xa_{i-1}+ya_{i-2})=x{a_{i-1}}^2+ya_{i-1}a_{i-2} \]

至此,我们想要得到 \({a_i}^2\) 的所有东西都有了,直接用矩乘加速就好了。

点击查看代码
struct node {
	int x[5][5];
}qwq,awa;
const int mod=1e9+7;
node mul(node a,node b) {
	node res; m0(res.x);
	For(i,1,4) For(j,1,4) For(k,1,4) (res.x[i][j]+=a.x[i][k]*b.x[k][j]%mod)%=mod;
	return res;
}
node qpo(node a,int b) {
	node res;m0(res.x);
	For(i,1,4) res.x[i][i]=1;
	for(;b;b>>=1,a=mul(a,a)) if(b&1) res=mul(res,a);
	return res;
}
void work() {
	int n,a1,a2;
	in3(n,a1,a2);
	int x,y;
	in2(x,y);
	if(n==1) {printf("%lld\n",a1*a1%mod); return ;}
	if(n==2) {printf("%lld\n",(a1*a1%mod+a2*a2%mod)%mod); return ;}
	m0(qwq.x);m0(awa.x);
	qwq.x[1][1]=x*x%mod,qwq.x[2][1]=y*y%mod,qwq.x[3][1]=2*x*y%mod;
	qwq.x[1][2]=1,qwq.x[1][3]=x,qwq.x[3][3]=y;
	qwq.x[1][4]=x*x%mod,qwq.x[2][4]=y*y%mod,qwq.x[3][4]=2*x*y%mod,qwq.x[4][4]=1;
	awa.x[1][1]=a2*a2%mod,awa.x[1][2]=a1*a1%mod,awa.x[1][3]=a1*a2%mod,awa.x[1][4]=(a1*a1%mod+a2*a2%mod)%mod;
	awa=mul(awa,qpo(qwq,n-2));
	printf("%lld\n",awa.x[1][4]);
}

标签:node,洛谷,题解,P5175,a1,awa,res,qwq,mod
From: https://www.cnblogs.com/CodingGoat/p/18469902

相关文章

  • Project Euler 588 题解
    这玩意好像甚至有递推式……不太懂(为什么是图片?cnblogs第一个公式没渲染成功)时间复杂度是\(O(4^{\degF}\logK)\)的。#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmaxn=100;intf[17][maxn],cur[10],al[4];intcalc(intK){ //cer......
  • 题解:[SNCPC2019] Pick Up
    ProblemLink[SNCPC2019]PickUp题意给出甲的坐标和速度,乙的坐标和速度,商场的坐标,可以让乙去接甲,求甲前往商场的最短用时。Solution分类讨论。思考乙是否要去接甲。这个很简单,令\(ans1\)为甲自己出发耗时,\(ans2\)为乙接甲耗时,两者取最小值即可。\(ans1\)很好算,那么\(......
  • P3794 签到题IV 题解
    题目传送门前置知识最大公约数解法\(\gcd\)和\(\operatorname{or}\)在固定左端点的情况下至多会变化\(O(\logV)\)次。以\(\gcd\)为例,考虑求出所有的四元组\((l,r,x,val)\)表示\(\foralli\in[l,r],\gcd\limits_{j=i}^{x}\{a_{j}\}=val\)。本题中因为\(x\)......
  • 洛谷题单指南-字符串-Test
    原题链接:https://www.luogu.com.cn/problem/CF25E https://codeforces.com/contest/25/problem/E题意解读:给定a,b,c三个字符串,求包含a、b、c的最短字符串长度。解题思路:要得到包含a、b、c的字符串,可以通过a、b、c连接形成,而要使得连接后的字符串最短,可以尽可能的利用重叠部分......
  • CF1458D Flip and Reverse 题解
    思路由于它要求\(\text{01}\)数量相等,我们可以考虑站在前缀和的角度看待这个问题。我们将\(0\)看作负一,\(1\)看作一。可以把它化成一个折线图(方便观察)。观察一下它的操作实际上在干什么。容易发现,在折线图上,我们把操作的\([l,r]\)的整段折线reverse了一遍。同样的,......
  • [题解]CF1136E Nastya Hasn't Written a Legend
    思路首先考虑操作1一个点\(i\)能被操作到的条件。注意到此时\(x\simi-1\)这些位置都是被更新过的,再仔细观察此时\(\forallj\in[x,i),a_j=a_x+\sum_{p=x}^{j-1}k_p\)。那么对于\(a_i\)如果会被修改将会变为\(a_x+\sum_{p=x}^{i-1}k_p\),那么\(a_i......
  • [ABC213G] Connectivity 2 题解
    T3[ABC213G]Connectivity2题意:给定一张无向图\(G\),将其删去\(0\) 条及以上的边构成一张新图,求对于所有点\(k\in(1,n]\),使\(k\) 与\(1\) 连通的新图的个数。比较套路的一道状压DP。尽管刚开始思考毫无头绪。Step1.令\(f_S\)表示点集为\(S\)的连通子图的个数,\(......
  • [TJOI2018] 游园会 题解
    T7[TJOI2018]游园会只能说是道有意思的好题。一般来说遇到这种题我们想到的都会是设\(f_{i,\dots}\)表示长度为\(i\),然后后面跟一堆状态的情况。此题需要我们满足两个条件:LCS的长度;不能出现\(\texttt{NOI}\)的子串。第二个限制我们可以通过状态设计来解决,但第一个......
  • [JSOI2018] 潜入行动 题解
    T6[JSOI2018]潜入行动很套路、很裸的一道树形DP。看了状态就会推方程的那种。设\(f_{u,i,0/1,0/1}\)表示以\(u\)为根的子树中有\(i\)个监听器、\(u\)有没有监听器、\(u\)有没有被监听的方案数。显然要枚举子节点\(v\)、\(u\)的监听器数量\(i\)、\(v\)的监听器数......
  • [ABC213G] Connectivity 2 题解
    [ABC213G]Connectivity2题解套路的经典图上计数题。考虑枚举和\(1\)相连的子集\(S\)。答案显然由两部分构成,\(S\)集合和\(1\)相连的方案数\(f(S)\)和\(S\)对于\(G\)的补集所有的方案数\(g(S)\)。答案就是二者相乘。显然\(g\)更好处理。直接枚举集合的边即可......