CF1592A

给你n把武器,每把武器可以使用任意次,一回合使用一把武器,不能连续两个回合使用同一把武器,求需要多少回合能击败怪兽。

题目只给了你一个限制条件,即不能连续使用同一把武器,这里需要一些贪心的思想,即:

每回合选取攻击力最大的武器,若上一回合用过了这把武器,则换用攻击力第二大的武器,以此循环,知道怪物血量为0,只要想出这个代码也就很简单了,不多说,看代码吧

复制代码
 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4 typedef long long ll;
 5 const int N = 1e5 + 10;
 6 int d[N];
 7 int main() {
 8     int t;
 9     scanf("%d", &t);
10     while (t--) {
11         int n, m;//武器数,怪物血量
12         scanf("%d%d", &n, &m);
13         for (int i = 1; i <= n; i++) scanf("%d", &d[i]);
14         sort(d + 1, d + n + 1);//对武器的攻击力排序
15         ll p = m / (d[n] + d[n - 1]);//这里把两个回合并做一个回合
16         ll cnt = 2 * p;//共经过了几个回合           
17         ll s = m % (d[n] + d[n - 1]);//剩下的血量用循环扣减直到0
18         while (s > 0) {
19             s -= d[n];
20             cnt++;
21             if (s <= 0)break;
22             s -= d[n - 1];
23             cnt++;//补上剩余的回合
24         }
25         printf("%d\n", cnt);
26     }
27     return 0;
28 }
复制代码

 

posted @   白与花糖  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示