专栏文章
题解:P13277 「CZOI-R4」改编
P13277题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minvk0we
- 此快照首次捕获于
- 2025/12/02 09:03 3 个月前
- 此快照最后确认于
- 2025/12/02 09:03 3 个月前
P13277 题解:
这篇题解是写给初学者看的,内容和思路可能较为繁琐,如果你想追求更为简便的方法,请移步其他优秀题解。
主要思路:
按题面模拟就可以了。
定义变量 存储最终答案,每次输入判断当前题目的改编方式,如果同时是两种方式,就舍弃掉这道题,否则判断当前题目的质量减去 或 的结果是否为负数,如果是的话就舍弃,否则更新 的值为两数的最大值。
代码实现:
定义数组 ,循环输入,每次输入判断 和 的值,如果同时为 就
continue,否则判断当前题目的质量减去 或 的值是否为负,如果为负就舍弃,否则更新 的值为 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 条评论,欢迎与作者交流。
正在加载评论...