QOJ.ac

QOJ

时间限制: 1 s 内存限制: 256 MB 总分: 100

#5632. 合成

统计

整数 $n$ 的一个组合(composition)是指一组有序的整数,其和为 $n$。两个元素相同但顺序不同的组合被视为不同的组合(这与划分(partition)不同)。例如,前几个整数的所有组合如下:

1: $\{1\}$ 2: $\{1+1, 2\}$ 3: $\{1+1+1, 1+2, 2+1, 3\}$ 4: $\{1+1+1+1, 1+1+2, 1+2+1, 1+3, 2+1+1, 2+2, 3+1, 4\}$

注意 $1+2$ 和 $2+1$ 在 $3$ 的组合中被计为不同的组合。正如你可能猜到的,对于 $n$,共有 $2^{(n-1)}$ 种组合。

在本题中,我们对 $n$ 的组合中的元素设定了条件。如果一个组合中没有任何元素属于集合 $S$,则称该组合“避开”(miss)集合 $S$。例如,前几个整数中避开偶数集合的组合如下:

1: $\{1\}$ 2: $\{1+1\}$ 3: $\{1+1+1, 3\}$ 4: $\{1+1+1+1, 1+3, 3+1\}$

没有奇数可以拥有避开奇数集合的组合,且任何仅由偶数组成的偶数组合必然是 $n/2$ 的组合的 $2$ 倍。

对于本题,你需要编写一个程序来计算输入整数 $n$ 的组合中,避开算术序列 $\{m + i \cdot k \mid i = 0, 1, \dots\}$ 中所有元素的组合数量。

输入格式

输入的第一行包含一个十进制整数 $P$ ($1 \le P \le 10000$),表示随后数据组的数量。每组数据应被独立且相同地处理。

每组数据由单行输入组成。它包含数据组编号 $K$,后跟三个空格分隔的整数 $n, m$ 和 $k$,其中 ($1 \le n \le 30$) 且 ($0 \le m < k < 30$)。

输出格式

对于每组数据,输出一行。该行包含数据组编号 $K$,后跟一个空格,再后跟避开指定序列的 $n$ 的组合数量。

样例

输入 1

3
1 10 0 2
2 15 1 4
3 28 3 7

输出 1

1 55
2 235
3 18848806

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.