[JLOI2015] 有意义的字符串 题解
拿到题目,我们首先分析一下这个奇怪的式子:
重点肯定是在里面的那个式子里面,最显眼的肯定也就是那个
解得:
因此原方程转变成了:
这个非常明显,是个标准的转移式子。这个时候就可以想到朴素 DP 大法,按照次数设计状态,然后根据前面的次数进行转移。
但原方程会有两个根,就是
轻松写出转移式子:
但是由于这个次数超出了 int
范围,所以考虑进行优化,这种对极大
然后我们突然发现一个问题,我们减去的
就在一筹莫展之际,那个亮眼的数据范围映入眼帘:
由于
-
如果
,则 ,向下取整为 。 -
如果
,且 ,此时原式会变成正数,则 ,向下取整为 。 -
如果
,且 ,此时原式依然是负数,则 ,向下取整为 。
综上所述,
最后由于模数 long long
,所以我们可以开一个老祖宗 __int128
,写个快读快写,就可以了过了。
代码如下:
#include<bits/stdc++.h>
#define int __int128//懒
using namespace std;
const int MAXN=83;
const int MOD=7528443412579576937;
int b,d,n;
void read(int &x)
{
x=0;
short flag=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') flag=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
x*=flag;
}
int quick_mul(int x,int y)//龟速乘,可能没有必要但是就是想写
{
int res=0;
while(y)
{
if(y&1) res=res+x,res%=MOD;
x=x+x,x%=MOD;
y>>=1;
}
return res;
}
void mul(int f[3],int a[3][3])//转移模板
{
int c[3];
memset(c,0,sizeof(c));
for(int j=1;j<=2;j++)
{
for(int k=1;k<=2;k++) c[j]=(c[j]+quick_mul(f[k],a[k][j]))%MOD;
}
memcpy(f,c,sizeof(c));
}
void mulself(int a[3][3])//矩阵自乘模板
{
int c[3][3];
memset(c,0,sizeof(c));
for(int i=1;i<=2;i++)
{
for(int j=1;j<=2;j++)
{
for(int k=1;k<=2;k++) c[i][j]=(c[i][j]+quick_mul(a[i][k],a[k][j]))%MOD;
}
}
memcpy(a,c,sizeof(c));
}
void write(int x)
{
if(x<10)
{
putchar(x+'0');
return;
}
write(x/10);
putchar(x%10+'0');
}
signed main()
{
read(b),read(d),read(n);
if(!n)//特判
{
puts("1");
return 0;
}
if(n==1)//特判
{
long long B=b,D=d;//玄学调试
cout<<((B+sqrt(D)))/2;
return 0;
}
int f[3];
memset(f,0,sizeof(f));
int a[3][3];
memset(a,0,sizeof(a));
a[1][1]=b,a[1][2]=1,a[2][1]=-(b*b-d)/4;
f[2]=b,f[1]=(b*b+d)/2;//构造两个矩阵
n-=2;
int temp=n;//n和n-2的奇偶性相同,所以提前储存n-2不会错
while(n)//快速幂模板
{
if(n&1) mul(f,a);
mulself(a);
n>>=1;
}
if(b*b!=d&&!(temp&1)) f[1]--;//特判第三种情况
write(f[1]);//输出
return 0;//华丽收场
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略