原子
题目信息
时间限制: 2s
空间限制: 512M
输入文件: atom.in
输出文件: atom.out
题目背景
根据玻尔理论,电子只能在特定的轨道上运动,因此,原子的能量也只能取一系列特定的值,这些量子化的能量值叫做能级,能量最低的状态叫做基态,其他的状态叫做激发态。
小 Z 最近受到了高中物理的毒打,他知道,处于第 n 能级(基态为第一能级)的原子向下跃迁时理论上能辐射出 (2n) 种不同能量的光子。而同时身为 OIer 的他在某一天突发奇想:如果一个原子可以多次跃迁,那么最少需要总共多少个原子,才能保证所有 (2n) 种能级对都被跃迁过至少一次呢?
小 Z 将问题发给了 YeahPotato 和你,你需要在 YeahPotato 口胡完之前写出代码。
题目描述
给定 n。你需要准备尽量少的原子,它们初始都处于第 n 能级。对于一个第 i 能级的原子,你可以控制它向第 [1,i)∩Z 中的某个能级跃迁。原子可以跃迁任意次,且最终不一定要到达基态。
要求每种形如“从第 i 能级向第 j 能级跃迁”(1≤j<i≤n)的情况都至少出现一次。
输入格式
一行一个正整数 n。
输出格式
第一行输出一个整数 m,表示最少需要几个原子。
接下来 m 行每行表示一个原子的操控过程,第一个整数 c 表示当前原子的跃迁次数,接下来 c 个正整数 d1⋯c 依次表示每次跃迁降低的能级数,你需要保证 ∑di<n。例如,n=8,c=3,d=[2,3,1],那么这个原子的能级变化为 8→6→3→2。
你需要保证 ∑c≤6×106。可以证明存在一组方案满足该条件且使用最少的原子。
样例
样例输入 1
样例输出 1
样例输入 2
样例输出 2
文本
4
3 1 1 1
2 2 1
2 1 2
1 3
数据范围与提示
在一个测试点中,如果你正确输出了最少的原子数,可以得到该测试点 20% 的分数。如果你正确输出了最少的原子数和任意一个满足所有条件的方案,可以得到该测试点 100% 的分数。否则无法得分。
注意,即使你只希望获得 20% 的分数,也需要输出 m 行合法的方案,也就是说,当且仅当你输出的方案不能覆盖所有 (2n) 种情况,但满足其他所有格式条件,你才能获得 20% 的分数。一个推荐的方式是输出 m 行 0。
| 测试点编号 |
n≤ |
| 1∼4 |
8 |
| 5∼8 |
25 |
| 9∼14 |
100 |
| 15∼20 |
2000 |
对于 100% 的数据,2≤n≤2000。
提示
所有测试点的输入 n 互不相同。
本题输出量较大,请使用较快的输出方式。