专栏文章
题解:P14304 【MX-J27-T1】分块
P14304题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mini9hn2
- 此快照首次捕获于
- 2025/12/02 02:51 3 个月前
- 此快照最后确认于
- 2025/12/02 02:51 3 个月前
Update on 2025/10/28 修改了代码中的 sqrt 为 sqrtl,能够通过 hack 数据
0x00 暴力
考虑从 开始枚举至 ,依次判断若不计开根号的复杂度,则显然时间复杂度为 。
期望得分:。
0x01 正解
首先注意到假设有一个非零自然数 ,则显然有:
所以我们考虑在区间 中寻找符合条件的。
因为在区间 中,他们的算术平方根向下取整都为 ,所以符合条件的个数为:
所以在区间 中一定会有 个符合条件的数。
然后再考虑一般情况:
首先,我们一定能求出一个 ,则在包含 的区间前,一共会有 个符合条件的数,然后可以处理区间 中的符合条件的数的个数:
所以甚至可以总结公式:
CPP#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int t,n;
int sum,ans,num;
cin>>t;
while(t--){
cin>>n;
sum=floor(sqrtl(n));
ans=(sum-1)*3;
num=sum*sum;
ans+=(n-num+sum)/sum;
cout<<ans<<'\n';
}
return 0;
}
时间复杂度:(不计算开平方的时间)。
预期得分:。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...