社区讨论
求助:C++(80分代码)
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @mi7dofgt
- 此快照首次捕获于
- 2025/11/20 19:58 4 个月前
- 此快照最后确认于
- 2025/11/20 19:58 4 个月前
题目:
CPP漏洞问题
1
通过
2
提交
题目提供者 MC Oier Team
评测方式 云端评测
标签
难度 尚无评定
时空限制 1000ms / 128MB
提交
提示:收藏到任务计划后,可在首页查看。
题目背景
这天,你刚刷完2小时的题,打开MC想放松一下,结果因为内存原因卡bug,在存档里卡出了一只不知名的生物,不击败它,就无法退出游戏。
题目描述
因为bug原因,你卡出了n(n<=10)个对付bug的技能,每个技能都有相对的攻击力和能耗,bug的血量为p(p<=1000),抗性为m(m<=20),意思就是它能抵抗m个攻击力在k(k<=10)及以下的技能,无视伤害。(注意:如果在bug的抗性消耗光前,bug受到抗性无法挡下的技能,则技能的杀伤力会被游戏卡没)当bug的血量不是正整数时(0及以下),你就可以退游戏了。 现在,你要求出你所要用的能打败bug的最低能耗,如果无解,那么输出“Impossible”(引号不输出)。
输入输出格式
输入格式:
第一行四个正整数:n,p,m,k
接下来的n行,每行两个正整数,分别表示每个技能的攻击力和能耗。
输出格式:
一个正整数,表示打败bug的最低能耗。
输入输出样例
输入样例#1: 复制
3 4 1 3
4 2
3 1
5 3
输出样例#1: 复制
3
说明
样例说明:因为技能2能让抗性消失,然后再用可以击败bug且能耗较少的技能1击败bug。
80分代码:
CPP#include<bits/stdc++.h>
using namespace std;
int a[20],b[20];
int main(){
int n,p,m,k,sum=0,i,j;
scanf("%d%d%d%d",&n,&p,&m,&k);
for(i=1;i<=n;i++)scanf("%d%d",&a[i],&b[i]);
for(i=1;i< n;i++)
for(int j=i+1;j<=n;j++)
if(b[j]<b[i]){
a[0]=a[j];a[j]=a[i];a[i]=a[0];
b[0]=b[j];b[j]=b[i];b[i]=b[0];
}else
if(b[i]==b[j]&&a[j]<a[i]){
a[0]=a[j];a[j]=a[i];a[i]=a[0];
b[0]=b[j];b[j]=b[i];b[i]=b[0];
}
for(i=1;i<=n;i++){
if(b[i]>k||m<=0){
b[0]=i;
break;
}
m--;
sum+=b[i];
}
for(int j=b[0];j<=n;j++){
if(p<=0){
printf("%d",sum);
return 0;
}
p-=a[j];
sum+=b[j];
}
printf("Impossible");
return 0;
}
???哪里错了
回复
共 3 条回复,欢迎继续交流。
正在加载回复...