#P1959. Darts

    ID: 960 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>搜索枚举三重循环TUD Programming Contest 2002DarmstadtGermany

Darts

题目描述:

背景

许多国家(包括德国)都有一种奇特的传统,那就是向圆形的扁平靶投掷小箭(通常,这些小箭被称为飞镖,这项游戏也叫飞镖游戏)。

在飞镖游戏中,靶标是一个扁平的圆形,它被划分成了扇形区域和环形区域。扇形区域从 112020 编号,环形区域则被称为双倍环或三倍环(见图 5)。靶板的中心部分被称为靶心,它又进一步细分为内圈部分(真正的靶心)和外圈部分(称为单倍靶心,见图 5)。

玩家们轮流朝靶板投掷飞镖。他们的得分取决于飞镖所命中的区域。如果命中编号为 2020 的扇形区域中的双倍环,得分就是 2×20=402×20 = 40 分。命中三倍环的话,得分则是相应扇形区域分数的 33 倍。靶心的内圈部分计 5050 分,外圈部分计 2525 分。每一轮中,玩家要向飞镖靶投掷 33 支飞镖,其得分就是在这一轮中所有命中飞镖靶上编号区域的飞镖得分总和。

问题

你的朋友们昨天玩了飞镖,他们比赛的得分还写在你房间的黑板上。通过查看这些得分,你想知道每个玩家是如何投掷飞镖的,以及他们可能命中了飞镖靶的哪些区域。你需要编写一个程序,当给定一轮的得分时,重构出三支飞镖命中飞镖靶的可能的不同组合的数量,且不考虑飞镖投掷的顺序。

举个例子,考虑一个玩家的总得分为 33 分的情况。这可能是以下几种方式产生的:

3 = 0 +    0 +    1*3    one dart hits slice 3

3 = 0 +    0 +    3*1    one dart hits slice 1 in treble ring

3 = 0 +    1*1 +  1*2    one dart hits slice 1 and one dart hits slice 2

3 = 0 +    1*1 +  2*1    one dart hits slice 1 and one dart hits slice 1 in double ring

3 = 1*1 +  1*1 +  1*1    all three darts hit slice 1

由此得到的可能的不同组合的总数是 55 种。 一个更复杂些的例子是得分为 99 分的情况:

9 = 0 +    0 +    1*9    one dart hits slice 9

9 = 0 +    0 +    3*3    one dart hits slice 3 in treble ring

9 = 0 +    1*1 +  1*8    one dart hits slice 1 and one dart hits slice 8

9 = 0 +    1*1 +  2*4    one dart hits slice 1 and one dart hits slice 4 in double ring

...

9 = 0 +    3*2 +  1*3    one dart hits slice 2 in treble ring and one dart hits slice 3

9 = 1*1 +  1*1 +  1*7    two darts hit slice 1 and one dart hits slice 7

...

9 = 2*1 +  3*1 +  2*2    one dart hits slice 1 in double ring, one dart hits slice 1 in treble ring and one dart hits slice 2 in double ring

9 = 1*3 +  1*3 +  1*3    three darts hit slice 3

9 = 1*3 +  1*3 +  3*1    two darts hit slice 3 and one dart hits slice 1 in treble ring

9 = 1*3 +  3*1 +  3*1    one dart hits slice 3 and two darts hit slice 1 in treble ring

9 = 3*1 +  3*1 +  3*1    three darts hit slice 1 in treble ring

组合的数量是多少呢?请编写一个程序来找出答案。

输入:

第一行包含测试用例的数量。

对于每个测试用例,你会得到一个飞镖得分,它是单独一行的一个正整数。

输出:

对于每个测试用例的输出,首先是包含 “Scenario #i:” 的一行,其中 ii 是从 11 开始的测试用例编号。然后单独一行打印出飞镖得分可能的组合数量。每个测试用例的输出最后以一个空行结束。

输入数据1

2
3
9

输出数据1

Scenario #1:
5

Scenario #2:
41

来源:

2002 年德国达姆施塔特工业大学编程竞赛