Logo 邂逅编程之美

UOJ

时间限制:1 s 空间限制:512 MB
统计

有 SPJ 的题一定是构造题。

题目描述

给定一个集合 $S=\{1,2,\dots,2n-1,2n\}$。

你需要选出若干个 $S$ 大小为 $n$ 的子集,使得:

  • 选出的子集互不相同。

  • 对于任意三个选出的子集,它们的交的大小不超过 $1$。

在此前提下,最大化选出子集的个数。并给出任意一种方案。

输入格式

从文件 $\texttt{set.in}$ 中读入数据。

本题有多组数据。

第一行一个正整数 $T$,表示数据组数。

接下来 $T$ 行,每行一个正整数 $n$。

输出格式

输出到文件 $\texttt{set.out}$ 中。

对于每组数据,第一行一个整数 $x$ 表示你选出的子集个数,接下来 $x$ 行每行 $n$ 个数,表示你给出的方案。

样例1输入

1
2

样例1输出

6
1 2
1 3
1 4
2 3
2 4
3 4

数据范围与提示

对于 $100\%$ 的数据满足:$1 \leq T \leq 20$,$1 \leq n \leq 10^4$。

  • $\operatorname{Subtask} 1(20\%)$:$n \leq 3$。

  • $\operatorname{Subtask} 2(30\%)$:$\vert n-1314 \vert \leq 520$。

  • $\operatorname{Subtask} 3(50\%)$:无特殊限制。

此外,本题采用 special judge,如果你的答案正确但方案错误,可以获得 $30\%$ 的分数。但请保证你的输出格式正确(必须输出 $x$ 个大小为 $n$ 的集合),否则可能获得 $0$ 分的高分。

我们下发了 $\texttt{checker.cpp}$ 文件,可以编译生成可执行文件 $\texttt{checker}$ 来检查你输出的正确性。

$\texttt{checker}$ 的使用方法为:$\texttt{checker }$,参数依次代表输入文件、你的输出文件、答案文件。