您当前的位置: 首页 > 

HeartFireY

暂无认证

  • 4浏览

    0关注

    334博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

2021-2022 ACM-ICPC Brazil Subregional Programming Contest H.Handling the Blocks 思维

HeartFireY 发布时间:2021-11-05 15:00:34 ,浏览量:4

题目分析

题目大意:给定一个序列包含 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             
关注
打赏
1662600635
查看更多评论
0.0392s