专栏文章

题解:P13830 【MX-X18-T2】「FAOI-R6」二进制与一 III(bit)

P13830题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio5ropx
此快照首次捕获于
2025/12/02 13:49
3 个月前
此快照最后确认于
2025/12/02 13:49
3 个月前
查看原文
题目的特殊性质很有帮助。发现 33 是大于等于 22 中最小的二进制全为 11 的数,所以考虑把 nn 尽可能拆出更多的 33 一定是最优的。
考虑对余数分类讨论:
  • n0(mod3)n \equiv 0 \pmod 3:显然全拆成 33 即可,答案为 2×n32 \times \frac{n}{3}
  • n1(mod3)n \equiv 1 \pmod 3:考虑拆成 n31\lfloor \frac{n}{3} \rfloor-133 和两个 22,答案为 2×(n31)+22 \times (\lfloor \frac{n}{3} \rfloor - 1) + 2
  • n2(mod3)n \equiv 2 \pmod 3:考虑拆成 n3\lfloor \frac{n}{3} \rfloor33 和一个 22,答案为 2×n3+12 \times \lfloor \frac{n}{3} \rfloor + 1
CPP
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve()
{
	ll n; cin >> n;
	ll ans;
	if(n % 3 == 0) ans = (n / 3) * 2;
	else if(n % 3 == 1) ans = (n / 3 - 1) * 2 + 2;
	else ans = (n / 3) * 2 + 1;
	cout << ans << '\n';
}

signed main()
{
	ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
	int T; cin >> T;
	while(T --) solve();
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...