题目分析
题目大意:给定一个序列包含 N N N个块,每个块有一个编号和颜色。初始状态下整个序列的编号无序。每次操作可以交换两个相同颜色的块,求是否能经过有限次交换,使序列顺序递增。
思路分析:首先需要明确两个点:
- 序列中所有块的编号按照 1 1 1~ N N N编号,最终如果能够达到有序状态,则每个块的位置和编号对应相等;
- 同一颜色的块集合内部可实现任意交换,即每个块能到达任何位置;不同颜色的块无法通过任何交换方式实现块交换。
因此,我们只需要对数据排序,判断排序前位置为 i i i的块和排序后位置为 i i i的块颜色是否相同,如果出现不同的,则一定不能交换到该位置。
Accepted Code#include
using namespace std;
const int N = 1e5 + 10;
struct node{
int ser, cor;
const bool operator n >> k;
for(int i = 1; i > node[i].ser >> node[i].cor;
ori[i] = node[i].cor;
}
sort(node + 1, node + 1 + n);
for(int i = 1; i
关注
打赏
热门博文
- 回坑记之或许是退役赛季?
- [LCT刷题] P1501 [国家集训队]Tree II
- [LCT刷题] P2147 洞穴勘测
- 2022-2023 ICPC Brazil Subregional Programming Contest VP记录
- [线段树套单调栈] 2019-2020 ICPC Asia Hong Kong Regional Contest H.[Hold the Line]
- The 2021 ICPC Asia Nanjing Regional Contest E.Paimon Segment Tree 区间合并线段树/维护矩阵乘法
- CF580E - Kefa and Watch 线段树维护哈希
- HDU5869 Different GCD Subarray Query 离线查询/区间贡献
- 27.CF1004F Sonya and Bitwise OR 区间合并线段树
- 26.CF1000F One Occurrence