P1220

[Google Codejam2010]Fence

[Google Codejam2010]Fence

我们计划建造一道非常长的栅栏。目前,建造地点已经确定,接下来需要购买所需的木板。

当地的商店提供长度各异的木板,每种长度的木板均可购买任意多块。为了避免浪费,所有木板的总长度必须恰好等于栅栏的长度。

给定栅栏的总长度 LL 以及可以购买的 NN 种木板长度,请求出恰好拼成长度 LL 所需的最少木板数量。如果无法恰好拼出长度 LL,则报告无解。

输入格式

第一行包含一个整数 TT,表示测试用例的数量。

每个测试用例包含两行:

  • 第一行包含两个以空格分隔的整数 LL 和 NN,分别表示栅栏的总长度和可购买的木板长度种数;
  • 第二行包含 NN 个以空格分隔的整数 B1,B2,…,BNB_1,B_2,\ldots,B_N,表示各种木板的长度。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: M,其中 xx 为从 11 开始的测试用例编号。

如果可以购买一块或多块木板,使其总长度恰好等于 LL,则 MM 为所需木板的最少数量;否则,MM 为字符串 IMPOSSIBLE。

样例输入

2
10000000001 3
23 51 100
10000000001 3
100 52 22

样例输出

Case #1: 100000004
Case #2: IMPOSSIBLE

样例解释

在第一个测试用例中,最优方案是使用 22 块长度为 2323 的木板、55 块长度为 5151 的木板,以及 108−310^8-3 块长度为 100100 的木板,共使用 108+410^8+4 块木板。

虽然仅使用 108+110^8+1 块长度为 100100 的木板可以使总长度超过 LL,但题目要求总长度必须恰好等于 LL,因此这种方案不符合要求。

在第二个测试用例中,所有可购买的木板长度均为偶数,因此只能拼出偶数长度,无法拼出给定的奇数长度。

数据范围

  • 1≤T≤501\le T\le 50;
  • 1010≤L≤101810^{10}\le L\le 10^{18};
  • 1≤N≤1001\le N\le 100;
  • 小数据中,1≤Bi≤1001\le B_i\le 100;
  • 大数据中,1≤Bi≤1051\le B_i\le 10^5。

来源与许可

本题为 Google Code Jam 2010 试题「Fence」,题面与测试数据整理自 BZOJ。

样例 1

输入

2
10000000001 3
23 51 100
10000000001 3
100 52 22

输出

Case #1: 100000004
Case #2: IMPOSSIBLE