25. CF-Half Queen Cover
题目链接:Half Queen Cover
很有趣的一个构造题。比赛的时候构造了一个小时也没做出来。
官方题解的解法非常巧妙。假设最后的答案是需要用 个棋子,在不考虑斜线的情况下控制了 行和 列,那么就会有 行和 列没有被控制。这些区域就需要用斜线来填充。注意到这些区域最多形成 条斜线,所以可以列出不等式:
三个加起来,就是 ,即 。
然后就是方案的构造,注意到 的时候可以整除,此时一种方案是在左上角将棋子放成一条斜线,在右下角将棋子放成一条斜线,如下图所示,中间的部分用斜向的攻击范围来覆盖:
00100000
01000000
10000000
000xxx00
000xxx00
000xxx00
00000001
00000010
其他两种情况由于需要向上取整,只需要在边角处放棋子转化成 的情况再去填充即可。
#include <bits/stdc++.h>
using namespace std;
void solve() {
int n;
cin >> n;
if (n <= 2) {
cout << "1\n1 1" << endl;
return;
}
int ans = 0, cnt = 0;
while (n % 3 != 2) {
n--;
ans++, cnt++;
}
ans += 2 * (n / 3) + 1;
cout << ans << endl;
for (int i = 1; i <= cnt; ++i) {
cout << n + i << ' ' << n + i << endl;
}
int k = n / 3;
for (int i = 1; i < k + 2; ++i) {
cout << i << ' ' << k + 2 - i << endl;
}
for (int i = n; i > n - k; --i) {
cout << i << ' ' << 2 * n + 1 - k - i << endl;
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T = 1;
// cin >> T;
while (T--)
solve();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现