CF1970B1 Exact Neighbours (Easy)
CF1970B1 Exact Neighbours (Easy)
题意
在 \(n\times n\) 的区域中有 \(n\) 座房子,且每列只有一个房子,你需要构造一个方案,使得第 \(i\) 座房子有一座房子 \(j\) 跟它的曼哈顿距离为 \(a_i(0\le a_i\le n)\),输出每座房子的位置和 \(i\) 对应的 \(j\),若没有方案输出 NO。
所有 \(a_i\) 均为偶数。
思路
神秘1900题,可以斜线摆放每座房子,则每座房子都有距离为 \(0,2,\cdots,n\) 的房子,然后,就没了。
代码
#include <bits/stdc++.h>
using namespace std;
int n,a[200005];
signed main() {
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
puts("YES");
for(int i=1;i<=n;i++)
cout<<i<<" "<<i<<endl;
for(int i=1;i<=n;i++)
cout<<(i+a[i]/2>n?i-a[i]/2:i+a[i]/2)<<" ";
return 0;
}

浙公网安备 33010602011771号