社区讨论

求助: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 条回复,欢迎继续交流。

正在加载回复...