有 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 }$,参数依次代表输入文件、你的输出文件、答案文件。