存钱达人
题目描述:
小C的打工存钱计划遵循以下规则:
1. 小C从第 1 天开始打工。第 1 周(第 1 到第 7 天),他每天可以获得 1 元的工资;第 2 周(第 8 到第 14 天),每天获得 2 元的工资;以此类推,第 w 周的每天获得 w 元工资。
2. 小C的钱包最多只能存放 K 元钱。
3. 每天结算工资时,小C会计算 当前钱包内原有的钱 加上 今天的工资 是否会大于钱包容量 K。
- 如果 没有超过 K,小C就会正常领取今天的工资,放入钱包中。
- 如果 超过 K(即钱包装不下了),小C会选择 放弃当天的全部工资,立刻打车去银行,将钱包里的钱 全部存入银行,存完后,钱包内的金额清零。这一天随之结束。
4. 一旦在某次去银行存钱后,银行账户里的总金额 第一次大于或等于 目标金额 M,小C就会心满意足地结束打工旅程,而这一天就是他达成目标的总天数。
每组测试数据给定钱包容量 K 和目标金额 M,请你求出小C的银行账户哪一天第一次至少有 M 元。如果小C永远无法存够 M 元,请输出 `-1`。
输入格式:
第一行包含一个正整数 $T$,表示测试数据的组数。
接下来 $T$ 行,每行包含两个正整数 $K$ 和 $M$,分别表示小C的钱包容量和需要达成的目标金额。两个整数之间由一个空格隔开。
输出格式:
输出共 $T$ 行,每行包含一个整数,表示对应测试数据中小C银行账户第一次至少达到 $M$ 元的具体天数。如果永远无法达到,请输出 `-1`。
数据范围:
对于 $100\%$ 的数据,满足 $1 \le T \le 10$。
| 测试点编号 | K≤ | M≤ | 特殊性质 | 分值占比 |
|---|---|---|---|---|
| 1∼5 | 100 | 3×104 | 保证一定有解 | 16% |
| 6∼10 | 100 | 4×104 | 无 | 16% |
| 11∼20 | 105 | 1011 | 无 | 34% |
| 21∼30 | 107 | 1014 | 无 | 34% |
样例输入:
(双击复制)2 2 3 1 10
样例输出:
(双击复制)6 -1
提示:
样例解释 #1
第一组数据(钱包容量 K=2,目标金额 M=3):
- 第 1 天:工资 1 元。钱包原 0 元,$0+1 \le 2$,领取工资,钱包变为 1 元。
- 第 2 天:工资 1 元。钱包原 1 元,$1+1 \le 2$,领取工资,钱包变为 2 元。
- 第 3 天:工资 1 元。钱包原 2 元,$2+1 > 2$。放弃今天工资,去银行存钱,银行账户新增 2 元(总计 2 元),钱包清零。
- 第 4 天:工资 1 元。钱包原 0 元,$0+1 \le 2$,领取工资,钱包变为 1 元。
- 第 5 天:工资 1 元。钱包原 1 元,$1+1 \le 2$,领取工资,钱包变为 2 元。
- 第 6 天:工资 1 元。钱包原 2 元,$2+1 > 2$。放弃今天工资,去银行存钱,银行账户新增 2 元(总计 4 元),钱包清零。此时银行账户 $4 \ge 3$,达到目标,输出第 6 天。
第二组数据(钱包容量 K=1,目标金额 M=10):
第一周,小C每隔一天就会去存一次钱,每次存 1 元,到第 7 天结束时,银行账户总计 3 元,钱包内 1 元。从第 8 天开始进入第二周,每天工资为 2 元,$1 + 2 > K$,放弃今天工资去存钱(银行总计 4 元),钱包清零。接下来的每一天,工资都装不进空钱包,小C都会空钱包跑去存钱(存入 0 元),银行余额将永远停留在 4 元,永远无法达到 10 元,故输出 `-1`。
时间限制: 1000ms空间限制: 256MB
来源: 温州市计算机学会