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

普及/提高-

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

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

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

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

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

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

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

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

输入格式

输入的第一行包含两个整数 NN 和 KK。

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

  • CiC_i(1≤Ci<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 特殊性质
1∼41\sim 4 n≤103n\le 10^3 K≤103K\le 10^3 无
5∼85\sim 8 n≤5×104n\le 5\times 10^4 K≤109K\le 10^9 无
9∼149\sim 14 n≤3×105n\le 3\times 10^5 K≤109K\le 10^9 无
15∼2015\sim 20 n≤5×105n\le 5\times 10^5 K≤109K\le 10^9 无

对于所有数据,保证 1≤n≤5×1051\le n\le 5\times 10^5,2≤K≤1092\le K\le 10^9,C1=1C_1=1,C1<C2<⋯<Cn<KC_1<C_2<\dots<C_n<K,di∈{0,1}d_i\in\{0,1\}。

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

首页