题解 [ABC243G] Sqrt
题意
不说,翻译很清楚。
分析
首先看到题面的
经过观察可以发现,当
所以说最多添加
于是我们可以想到动态规划。
状态设计
设
边界条件
状态设计
最终答案
我们可以观察到
此时
转移的时候需要后缀和,才能保证在
时间复杂度
注意事项
unsigned long long
存储,scanf
的格式符为 %llu
,使用流读入的可以跳过。
代码
//the code is from chenjh
#include<cstdio>
#include<cstring>
#include<cmath>
typedef unsigned long long LL;
LL f[11][60000];
LL mysqrt(LL x){//避免浮点误差,进行微调。
LL ret=sqrt(x);
for(;ret*ret<=x;++ret);
for(;ret*ret>x;--ret);
return ret;
}
int main(){
int T;scanf("%d",&T);
for(LL x;T--;){
memset(f,0,sizeof f);//清空数组。
scanf("%llu",&x);
LL sqx=mysqrt(x),ssqx=mysqrt(sqx);
for(int j=1;j<=ssqx;j++) f[2][j]=sqx-((LL)j*j)+1;//预处理 f[2]。
for(int j=ssqx-1;j>0;--j) f[2][j]=f[2][j]+f[2][j+1];//进行后缀和。
for(int i=3;i<=6;i++){
sqx=ssqx,ssqx=mysqrt(ssqx);
for(int j=1;j<=ssqx;j++)f[i][j]=f[i-1][(LL)j*j];
for(int j=ssqx-1;j>0;--j) f[i][j]=(LL)f[i][j]+f[i][j+1];//进行后缀和。
}
printf("%llu\n",f[6][1]);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】