#P14650. [IATI2017 day2]clubs
[IATI2017 day2]clubs
题目描述
X 城的市民非常喜欢参加各种各样的社团。多年来,城里的社团数量急剧增加,如今已经出现了很多成员完全相同的社团。市政府决定,是时候对社团体系进行一些规范了。
他们决定:城市中的社团系统必须满足如下要求:
(A) 对于任意两位市民,至少存在一个社团,使得这两人中恰有一人是该社团成员,而另一人不是。
一位市民可以参加多个社团,也可以一个社团都不参加。
由于维护每个社团都需要花费,因此社团总数应尽可能少。除此之外,每个社团还需要开会,但城市里没有足够大的会议厅,因此还要尽量减小最大社团的人数(即成员数最多的那个社团的人数)。当然,可能会有多个“最大社团”并列。
设 X 城共有 位市民,编号为 到 。
请编写程序 clubs,求出满足要求 (A) 的最少社团数。同时你还需要构造出每个社团的成员安排,使得在社团总数最少的前提下,最大社团的人数也尽可能少。若有多种解,输出任意一种即可。
输入格式
输入仅一行,一个整数 ,表示 X 城中的市民人数。
输出格式
第一行输出两个用空格分隔的整数:
- 满足要求 (A) 所需的最少社团数;
- 在此基础上,成员数最多的社团的最小可能人数。
接下来,对于你构造出的每个社团,各输出一行。每行第一个数表示该社团成员人数,后面跟着该社团所有成员的编号(顺序任意)。
数据范围
子任务
- 的测试满足
- 另外 的测试满足
评分方式
每个测试点单独计分。
样例
输入
5
输出
3 2
2 2 4
2 3 4
1 5
样例解释
我们可以用最少的 个社团满足要求 (A),并且最大社团的人数可以最小到 。
要求 (A) 也可以用如下社团集合满足:
、 和
但这种情况下,最大社团的人数是 。