专栏文章
[题解]P14593 [LNCPC 2025] 猫猫虫打 CF
P14593题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @min12yo6
- 此快照首次捕获于
- 2025/12/01 18:50 3 个月前
- 此快照最后确认于
- 2025/12/01 18:50 3 个月前
小朋友们觉得这题是黄题,你们同意吗。
思路
Exchange Argument 模板题。
考虑两个二元组 在什么情况下先选择 1,再选择 2:
- 若 ,如果先选择 2,1 一定选择不了,一定不优于原先策略。
- 若 ,此时能不能取到 2 只取决于当前 的取值,也就是说无论是 12,还是 21,所带来的影响是一样的。
当 或 时显然同上,先选 2 再选 1 是不劣的。整合一下上面的分析,按照 排序,当 相等时,再按照 分别排序。最后按照排序后的顺序模拟即可。
Code
CPP#include <bits/stdc++.h>
#define re register
#define fst first
#define snd second
#define int long long
#define chmax(a,b) (a = max(a,b))
using namespace std;
typedef pair<int,int> pii;
const int N = 1e6 + 10;
int n,d,ans;
pii arr[N];
inline int read(){
int r = 0,w = 1;
char c = getchar();
while (c < '0' || c > '9'){
if (c == '-') w = -1;
c = getchar();
}
while (c >= '0' && c <= '9'){
r = (r << 3) + (r << 1) + (c ^ 48);
c = getchar();
}
return r * w;
}
signed main(){
n = read();
for (re int i = 1;i <= n;i++) arr[i].fst = read(),arr[i].snd = read();
sort(arr + 1,arr + n + 1,[](const pii &a,const pii &b){
if (max(a.fst,a.snd) != max(b.fst,b.snd)) return max(a.fst,a.snd) < max(b.fst,b.snd);
else if (a.fst != b.fst) return a.fst < b.fst;
else return a.snd < b.snd;
});
for (re int i = 1;i <= n;i++){
if (d <= arr[i].fst) ans++,chmax(d,arr[i].snd);
} printf("%lld",ans);
return 0;
}
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...