题解:P13277 「CZOI-R4」改编

· · 题解

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; } `````` 感谢阅读。 写题解不易,留个赞再走吧。