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 @ 2023-03-15 10:12  白与花糖  阅读(21)  评论(0)    收藏  举报