Atcoder Beginner Contest 356题解(D、E)
D. Masked Popcount
按位考虑 + 排列组合
考虑
因为求的是所有
首先如果两个数
假设当前
bit: 10 9 8 7 6 5 4 3 2 1 0
M: 1 0 1 1 0 1 1 1 0 0 1
i: _ _ _ 1 _ _ _ _ _ _ _
如果1 0 1
,则0
到0 1 1 1 0 0 1
;方案数是
如果0
到1 0 0
,则0
到1 1 1 1 1 1 1
。方案数是
写代码时注意取模操作,传入函数中的参数也应该取模。
int n, m;
void solve() {
// cout << ((1 << 9) + (1 << 7) + (1 << 6) + (1 << 4) + 1) << '\n';
cin >> n >> m;
int ans = 0ll;
for (int r = 60ll; r >= 0ll; r --) {
if (m >> r & 1ll) {
if (n >> r & 1ll) {
plut(ans, plu(mul((n >> r + 1ll) % mod, (1ll << r) % mod), (n & ((1ll << r) - 1ll)) % mod + 1ll));
}
else {
plut(ans, mul((n >> r + 1ll) % mod, (1ll << r) % mod));
}
}
}
cout << ans % mod << '\n';
}
E. Max/Min
考虑如果a数组中的元素各不相同。
观察到
现在如果我们(先将
在代码实现中要注意特判
int n;
int cnt[(int)2e6 + 10];
int s[(int)2e6 + 10];
void solve() {
cin >> n;
memset(cnt, 0, sizeof cnt);
vector<int> a;
int max_a = 0;
for (int i = 0; i < n; i ++) {
int x;
cin >> x;
a.push_back(x);
cnt[x] ++;
max_a = max(max_a, x);
}
sort(a.begin(), a.end());
a.erase(unique(a.begin(), a.end()), a.end());
int ans = 0;
memset(s, 0, sizeof s);
for (int i = 1; i <= (int)1e6; i ++) {
s[i] = s[i - 1] + cnt[i];
}
// for (int i = 1; i <= 4; i ++) {
// cout << s[i] << ' ';
// }
// cout << '\n';
// for (int i = 0; i < a.size(); i ++) {
// cout << a[i] << ' ';
// }
// cout << '\n';
// for (int i = 0; i < a.size(); i ++) {
// cout << cnt[a[i]] << ' ';
// }
// cout << '\n';
for (int i = 0; i < a.size(); i ++) {
int m = max_a / a[i];
for (int j = 1; j <= m; j ++) {
// cout << j << ' ' << j * a[i] + a[i] - 1 << ' ' << j * a[i] << '\n';
// int ct = (s[j * a[i] + a[i] - 1] - s[(j == 1 ? j * a[i] : j * a[i] - 1)]) * cnt[a[i]] * j;
// cout << ct << '\n';
ans += (s[min(j * a[i] + a[i] - 1, (int)1e6)] - s[min((int)1e6, (j == 1 ? j * a[i] : j * a[i] - 1))]) * cnt[a[i]] * j;
}
ans += cnt[a[i]] * (cnt[a[i]] - 1) / 2;
}
cout << ans << '\n';
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】