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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)