UVA??? 考试 Exam
本来这篇题解是想在中考前写的,但是直到考前都没调出来,原因是 pow()
的精度感人。
由于 ,令 ,答案即 的无序三元组 数量。
考虑把无序转成有序,即 ,但显然会算少,分 种情况讨论:
- ,合法的有 ,对答案的贡献为 。
- ,合法的有 ,贡献为 。
- ,合法的有 ,贡献为 。
- ,合法的有 ,贡献为 。
我们只需要统计 中情况每种的数量,乘上对应的贡献加起来即可。
- ,,,方案数为 。
- ,枚举 (显然不会超过 ),,方案数为 。
- ,枚举 ,,方案数为 。
- ,枚举 ,,方案数为 。
不难计算出复杂度 。
#include <bits/stdc++.h>
#define int long long
using namespace std;
namespace vbzIO {
char ibuf[(1 << 20) + 1], *iS, *iT;
#if ONLINE_JUDGE
#define gh() (iS == iT ? iT = (iS = ibuf) + fread(ibuf, 1, (1 << 20) + 1, stdin), (iS == iT ? EOF : *iS++) : *iS++)
#else
#define gh() getchar()
#endif
#define mt make_tuple
#define mp make_pair
#define fi first
#define se second
#define pc putchar
#define pb push_back
#define ins insert
#define era erase
#define bg begin
#define rbg rbegin
typedef tuple<int, int, int> tu3;
typedef pair<int, int> pi;
inline int rd() {
char ch = gh();
int x = 0;
bool t = 0;
while (ch < '0' || ch > '9') t |= ch == '-', ch = gh();
while (ch >= '0' && ch <= '9') x = (x << 1) + (x << 3) + (ch ^ 48), ch = gh();
return t ? ~(x - 1) : x;
}
inline void wr(int x) {
if (x < 0) {
x = ~(x - 1);
putchar('-');
}
if (x > 9)
wr(x / 10);
putchar(x % 10 + '0');
}
}
using namespace vbzIO;
int n, k, t;
int calc() {
int res = k;
for (int i = 1; i <= k; i++) {
res += max((int)sqrt(n / i) - i, 0ll) * 3;
res += max(n / (i * i) - i, 0ll) * 3;
for (int j = i + 1; i * j * (j + 1) <= n; j++)
res += (n / (i * j) - j) * 6;
}
return res;
}
int cl(int x) {
int res = -1, l = 1, r = 1e6;
while (l <= r) {
int mid = (l + r) >> 1;
if (mid * mid * mid <= x) l = mid + 1, res = mid;
else r = mid - 1;
}
return res;
}
signed main() {
while (~scanf("%lld", &n)) {
k = cl(n);
printf("Case %lld: %lld\n", ++t, calc());
}
return 0;
}
upd : 补充一下复杂度证明,但是不太严谨。
不难发现复杂度主要是在第 部分,为
后面那个 可以直接扔出来变成 ,考虑:
所以复杂度就大概 了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!