• HDU 5821 Ball (排序)


    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5821

    有n个盒子,每个盒子最多装一个球。

    现在进行m次操作,每次操作可以将l到r之间盒子的球任意交换。

    问进行上述操作后,是否能变成指定的状态。

    将颜色相同的球,尽量靠最终状态近的分配。对于每次操作 按最终序号靠近进行排序。最后检查是否一致就行了。

    官方题解:
    假设有4个红球,初始时从左到右标为1,2,3,4。那么肯定存在一种方案,使得最后结束时红球的顺序没有改变,也是1,2,3,4。 那么就可以把同色球都写成若干个不同色球了。所以现在共有n个颜色互异的球。按照最终情况标上1,2,。。,n的序号,那么贪心的来每次操作就是把一个区间排序就行了。

     1 //#pragma comment(linker, "/STACK:102400000, 102400000")
     2 #include <algorithm>
     3 #include <iostream>
     4 #include <cstdlib>
     5 #include <cstring>
     6 #include <cstdio>
     7 #include <vector>
     8 #include <cmath>
     9 #include <ctime>
    10 #include <list>
    11 #include <set>
    12 #include <map>
    13 using namespace std;
    14 typedef long long LL;
    15 typedef pair <int, int> P;
    16 const int N = 1e3 + 5;
    17 P ball[N];
    18 int a[N], b[N];
    19 
    20 int main()
    21 {
    22     int t, n, m;
    23     scanf("%d", &t);
    24     while(t--) {
    25         scanf("%d %d", &n, &m);
    26         for(int i = 1; i <= n; ++i) {
    27             scanf("%d", a + i);
    28             ball[i].first = 0, ball[i].second = a[i];
    29         }
    30         for(int i = 1; i <= n; ++i) {
    31             scanf("%d", b + i);
    32             for(int j = 1; j <= n; ++j) {
    33                 if(!ball[j].first && ball[j].second == b[i]) {
    34                     ball[j].first = i; //最终
    35                     break;
    36                 }
    37             }
    38         }
    39         int l, r;
    40         while(m--) {
    41             scanf("%d %d", &l, &r);
    42             sort(ball + l, ball + r + 1);
    43         }
    44         bool ok = true;
    45         for(int i = 1; i <= n; ++i) {
    46             if(ball[i].first != i) {
    47                 ok = false;
    48                 break;
    49             }
    50         }
    51         printf("%s
    ", ok ? "Yes" : "No");
    52     }
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    2020-05-12 Linux基本操作
    SpringBoot项目设置能访问静态资源,resource/static目录下文件
    2020-04-25 Hadoop框架学习
    2020-05-24 vue简单语法
    2020-04-25 elasticsearch
    2020-04-25 kafka
    2020-04-11 函数式数据处理(Java8)
    2020-03-29 分布式事务解决方案(RocketMQ)
    配置文件示例
    Spring-data-redis实现消息队列的demo(附源码)
  • 原文地址:https://www.cnblogs.com/Recoder/p/5762518.html
Copyright © 2020-2023  润新知