题解:P13277 「CZOI-R4」改编
_DATA_X_
·
·
题解
P13277 题解:
## 主要思路:
按题面模拟就可以了。
定义变量 $sum$ 存储最终答案,每次输入判断当前题目的改编方式,如果同时是两种方式,就舍弃掉这道题,否则判断当前题目的质量减去 $k1$ 或 $k2$ 的结果是否为负数,如果是的话就舍弃,否则更新 $sum$ 的值为两数的最大值。
## 代码实现:
定义数组 $a_n,x_n,y_n$,循环输入,每次输入判断 $x_i$ 和 $y_i$ 的值,如果同时为 $1$ 就 `continue`,否则判断当前题目的质量减去 $k1$ 或 $k2$ 的值是否为负,如果为负就舍弃,否则更新 $sum$ 的值为 `max(sum,a[i]-k1);` 或 `max(sum,b[i]-k2);`。
**[AC](https://www.luogu.com.cn/record/224504206) 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;
}
``````
感谢阅读。
写题解不易,留个赞再走吧。