ARC174D Digit vs Square Root 题解
ARC174D Digit vs Square Root
题目大意#
给定 ,求有多少个正整数 满足:在十进制表示下, 是 的前缀。
Solve#
很难直接手推性质,考虑用如下程序打表:
#include<bits/stdc++.h>
#pragma GCC optimize(1,2,3,"Ofast","inline")
using namespace std;
#define int long long
inline bool check(int x,int y)
{
stack<int>a,b;
while(x)
a.push(x%10),x/=10;
while(y)
b.push(y%10),y/=10;
while(!a.empty())
{
if(a.top()!=b.top()) return 0;
a.pop();b.pop();
}
return 1;
}
signed main()
{
int res=0,j,lst;
for(int i=1;i<=1000000;i=-~i)
{
j=i;lst=res;
while(check(sqrt(j*1.0),j)) j=-~j,res=-~res;
if(j>i) printf("%lld~%lld: %lld~%lld\n",i,j-1,-~lst,res);
i=j;
}
return 0;
}
得到:
1~1: 1~1
80~80: 2~2
90~109: 3~22
9800~9800: 23~23
9900~10099: 24~223
998000~998000: 224~224
999000~1000999: 225~2224
我们不难可以发现这样的性质:
区间 (即 )中的所有数 以及 (即 )满足条件( 均为偶数)。
仔细想一下,确实很对。
对于区间 ,我们将他拆成 和 来考虑:
-
对于 ,即 ,显然他们开根向下取整都是 ,即 ,而且它们的前 位也是 。并且这些数的数位都是偶数,对于每个 有 个。
-
对于 ,即 ,它们开根向下取整都是 ,即 ,而它们的前 位也是 。并且这些数的数位都是奇数,,对于每个 有 个。
对于 ,即 :
- ,所以 ,即 ,显然 是 的前缀,而不是 的前缀。这些数的数位都是偶数,,对于每个 有 个。
所以思路就很显然了:
-
首先处理出 之间的所有符合条件的数的个数 。
-
对于每次询问,判断出 的位数 ,无论 是奇数还是偶数,答案 都可以先加上 。
-
若 是偶数:如果 ,令 加上 ;如果 ,令 加上 。
-
若 是奇数:令 加上 。
Code#
#include<bits/stdc++.h>
#pragma GCC optimize(1,2,3,"Ofast","inline")
using namespace std;
#define int long long
inline int read()
{
short f=1;
int x=0;
char c=getchar();
while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+(c^48),c=getchar();
return x*f;
}
inline int Get(int x)
{
int res=0;
while(x)
res=-~res,x/=10;
return res;
}
int t,n,sum[20],mi[20]={1},ans;
signed main()
{
for(int i=1;i<=18;i=-~i)
{
mi[i]=mi[i-1]*10;
sum[i]=sum[i-1]+mi[i/2];
if(i%2==0) sum[i]=-~sum[i];
}
// cout<<sum[3];
t=read();
while(t--)
{
n=read();
int res=Get(n);
// cout<<res<<endl;
ans=sum[res-1];
if(res%2==0)
{
// puts("into Case 1");
if(n>=mi[res]-2*mi[res/2]) ans=-~ans;
if(n>=mi[res]-mi[res/2]) ans+=n-(mi[res]-mi[res/2])+1;
}
else ans+=min(n,mi[res-1]+mi[res/2]-1)-mi[res-1]+1;
printf("%lld\n",ans);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探