专栏文章

题解:P13277 「CZOI-R4」改编

P13277题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minvk0we
此快照首次捕获于
2025/12/02 09:03
3 个月前
此快照最后确认于
2025/12/02 09:03
3 个月前
查看原文

P13277 题解:

注:\color{red}注: 这篇题解是写给初学者看的,内容和思路可能较为繁琐,如果你想追求更为简便的方法,请移步其他优秀题解。

主要思路:

按题面模拟就可以了。
定义变量 sumsum 存储最终答案,每次输入判断当前题目的改编方式,如果同时是两种方式,就舍弃掉这道题,否则判断当前题目的质量减去 k1k1k2k2 的结果是否为负数,如果是的话就舍弃,否则更新 sumsum 的值为两数的最大值。

代码实现:

定义数组 an,xn,yna_n,x_n,y_n,循环输入,每次输入判断 xix_iyiy_i 的值,如果同时为 11continue,否则判断当前题目的质量减去 k1k1k2k2 的值是否为负,如果为负就舍弃,否则更新 sumsum 的值为 max(sum,a[i]-k1);max(sum,b[i]-k2);
AC Code:
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int N=1e5+50;//常量
int n,k1,k2;//含义如题面所述
int a[N],x[N],y[N];
int32_t main(){
	cin.tie(nullptr)->ios::sync_with_stdio(false);
	cout.tie(nullptr)->ios::sync_with_stdio(false);
	cin>>n>>k1>>k2;
	int sum=-1;//存最终答案,因为取的是最大值,所以初值为-1
	for(int i=1;i<=n;i++){
		cin>>a[i]>>x[i]>>y[i];
		if(x[i]==1&&y[i]==1){
			continue;
		}//特判两种改编都是的情况
		if(x[i]==0&&y[i]==0){
			sum=max(sum,a[i]);
		}//特判两种改编都不是的情况
		if(x[i]==1){
			if(a[i]-k1<0){
				continue;
			}
			sum=max(sum,a[i]-k1);
		}//如果是第一种情况,更新 sum 的值
		if(y[i]==1){
			if(a[i]-k2<0){
				continue;
			}
			sum=max(sum,a[i]-k2);
		}//如果是第二种情况,更新 sum 的值
	}
	cout<<sum;//输出结果
	return 0;	
}
感谢阅读。
写题解不易,留个赞再走吧。

评论

0 条评论,欢迎与作者交流。

正在加载评论...