这个题是传说中的 Hack 狂魔 qmqmqm 出的构造题。当然要神。
这个题的本质实际上就是构造一个图,然后使得任意两点间都有长度为 $k$ 的路径相连,然后对于任意的 $i < k$,都存在两个点使得这两个点没有长度为 $i$ 的路径相连。
我的构造方法就是:
- 首先给每个点连一个自环。
- 构造一个大小为 $n-k+1$ 的团。
- 然后剩下的点造成一条链并与 $n-k+1$ 号点相连。
这样的解是一组可行解。
时间复杂度 $O(n^2)$,空间复杂度 $O(1)$。
#include <cstdio>
#define abs(x) ((x) > 0 ? (x) : -(x))
int n, k;
int main()
{
scanf("%d%d", &n, &k);
for (int i = ; i <= n; putchar('\n'), i ++)
for (int j = ; j <= n; j ++)
if ((i <= n - k + && j <= n - k + ) || abs(i - j) <= ) putchar('');
else putchar('');
return ;
}
Construct_Gromah