CF1173B

题目简述

题目要求在一个 m×m 的棋盘上放置 n 个棋子,使得满足以下规则:对于任意的两个棋子 ij ,有 |rirj|+|cicj||ij|

思路简述

m 的最小值为 n2+1
接下来我们详细解释一下为什么这样的放置方式能够满足规则。

思路讲解

首先我们观察到,棋子的坐标差的绝对值最大为 m1。那么为了满足规则 |rirj|+|cicj||ij|,我们可以将棋子按照 i 的顺序依次放在第 i 行和第 1 列。这样就能保证对于任意的两个棋子 ij,有 |rirj|+|cicj||ij|

假设有两个棋子 ij(i<j),它们的坐标分别是 (ri,ci)(rj,cj)。由于棋子按照 i 的顺序依次放置,所以 rirj,那么根据放置方式可知,那么根据放置方式可知,ri=irj=j。因此有 |rirj|=|ij|,同理 |cicj|0。所以对于任意的两个棋子 ij,有 |rirj|+|cicj||ij| 成立。

代码实现

#include<iostream>
using namespace std;

int n,m;

int main() {
    cin >> n;
    m=n/2+1;
    cout<<m<<endl;
    for(int i=1;i<=m;i++) 
    	cout<<i<<" "<<1<<endl;
    for(int i=2;i<=n-m+1;i++)
        cout<<m<<" "<<i<<endl;
    return 0;
}
posted @   To_Carpe_Diem  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示