AtCoder Beginner Contest 283 Ex Popcount Sum
记录一下这个神奇的套路。
首先有 。证一下:
设 ,答案为:
至此后面部分可以类欧计算。
code
// Problem: Ex - Popcount Sum // Contest: AtCoder - UNIQUE VISION Programming Contest 2022 Winter(AtCoder Beginner Contest 283) // URL: https://atcoder.jp/contests/abc283/tasks/abc283_h // Memory Limit: 1024 MB // Time Limit: 4000 ms // // Powered by CP Editor (https://cpeditor.org) #include <bits/stdc++.h> #define pb emplace_back #define fst first #define scd second #define mems(a, x) memset((a), (x), sizeof(a)) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ldb; typedef pair<ll, ll> pii; ll dfs(ll a, ll b, ll c, ll n) { if (!a || !n) { return (n + 1) * (b / c); } if (n < 0) { return 0; } if (a >= c || b >= c) { return dfs(a % c, b % c, c, n) + (a / c) * (n * (n + 1) / 2) + (b / c) * (n + 1); } ll m = (a * n + b) / c; return m * n - dfs(c, c - b - 1, a, m - 1); } void solve() { ll n, a, b; scanf("%lld%lld%lld", &n, &a, &b); ll m = (n - b) / a; ll ans = a * m * (m + 1) / 2 + (m + 1) * b; for (int i = 1; (1LL << i) <= n; ++i) { ans -= dfs(a, b, 1LL << i, m); } printf("%lld\n", ans); } int main() { int T = 1; scanf("%d", &T); while (T--) { solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App