U136589.[BalticOI 2006] coin collector钱币收藏家(文件判题)

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

文件读入:coin.in
文件读出:coin.out

有一个国家,流通着 NN 种面值的硬币,其中包括了 1 分硬币。另外,有一种面值为 KK 分的纸币,它超过了所有硬币的面值。有一位硬币收藏家,他想收集每一种面值的硬币样本。他家里已经有一些硬币,但是现在他只带着一张 KK 分纸币去商店。

商店里总共有 K1K-1 种商品,价格分别为 11 分、22 分…… K1K-1 分。

这家商店使用以下贪心算法找零:

  1. 假设总共需要找 AA 分(即 A=K商品价格A = K - \text{商品价格});
  2. 寻找最高的不超过 AA 的硬币面值,设它为 BB 分硬币;
  3. 给顾客一枚 BB 分硬币,然后令 AABA \gets A-B
  4. 如果 A=0A=0,算法结束;否则转第 2 步。

收藏家想用他的 KK 分纸币买一件商品。请你编写程序计算:

  1. 收藏家一次购物最多能够得到多少种他【还没有】的硬币?(注意同一种硬币即使找零多枚,也只算作获得 1 种新硬币)。
  2. 在满足第一问(获得最多新硬币种类数)的前提下,他能够购买的最贵的商品价格是多少?(即找零金额最小,也就是商品价格最大)。

输入格式

输入的第一行包含两个整数 NNKK

以下 NN 行描述各种流通的硬币的面值和是否已收藏状态。第 i+1i+1 行包含整数 CiC_idid_i

  • CiC_i1Ci<K1 \le C_i < K)表示第 ii 种硬币的面值。
  • di=1d_i=1,收藏家已经有硬币 CiC_i;若 di=0d_i=0,收藏家还没有硬币 CiC_i

输入保证按照硬币面值递增顺序,也就是 C1<C2<<CNC_1 < C_2 < \dots < C_N,并且第一枚硬币必定是 11 分硬币,也就是 C1=1C_1 = 1

输出格式

输出共两行。

第一行为一个整数,表示收藏家最多能获得多少种之前还没有的硬币。
第二行为一个整数,表示在前一问的前提下,收藏家能购买的最贵的商品价格。

输入输出样例

  • 输入#1

    7 25
    1 0
    2 0
    3 1
    5 0
    10 0
    13 0
    20 0

    输出#1

    3
    6

说明/提示

大数据

数据范围

测试点编号 nn KK 特殊性质
141\sim 4 n103n\le 10^3 K103K\le 10^3
585\sim 8 n5×104n\le 5\times 10^4 K109K\le 10^9
9149\sim 14 n3×105n\le 3\times 10^5 K109K\le 10^9
152015\sim 20 n5×105n\le 5\times 10^5 K109K\le 10^9

对于所有数据,保证 1n5×1051\le n\le 5\times 10^52K1092\le K\le 10^9C1=1C_1=1C1<C2<<Cn<KC_1<C_2<\dots<C_n<Kdi{0,1}d_i\in\{0,1\}

输入解题思路,AI测评打分。不知道怎么写?

首页