zoukankan      html  css  js  c++  java
  • Ball---hdu5821(排序)

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

    题意:有n个盒子,每个盒子又一个值 a[i] 如果 a[i] 大于 0 说明盒子里面有 1 个颜色为 a[i] 的球,如果 = 0 说明里面,没有球;

    现在有m个操作,每次操作都是从盒子[L, R]内拿走所有的球,然后随机放入[L, R]的盒子中,问经过m次操作之后是否能达到b序列的状态;

    我们可以把b序列的每个数当做 1 2 3 4 5 6 ... n 按顺序排好的n个数;那么a序列就是123456...n这些的的乱序,问经过m次的排序是否能达到有序的状态;

    所以我们可以把a序列转化为t

    例如

         a : 1 1 2 2 0

         b : 2 2 1 1 0

    b相当于1 2 3 4 5

       t :  3 4 1 2 5

    t[i]意思就是a[i]在b中出现的相应位置;

    然后排序即可;

     水题可是想不到就变成了难题啊

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<math.h>
    using namespace std;
    
    #define INF 0xfffffff
    #define N 1050
    typedef long long LL;
    
    int main()
    {
        int T, a[N], b[N], t[N];
        scanf("%d", &T);
        while(T--)
        {
            memset(t, -1, sizeof(t));
    
            int n, m;
            scanf("%d %d", &n, &m);
    
            for(int i=1; i<=n; i++)
                scanf("%d", &a[i]);
    
            int cnt = 1;
            for(int i=1; i<=n; i++)
            {
                scanf("%d", &b[i]);
                for(int j=1; j<=n; j++)
                {
                    if(t[j] == -1 && a[j] == b[i])
                    {
                        t[j] = cnt++;
                        break;
                    }
                }
            }
    
            for(int i=1; i<=m; i++)
            {
                int L, R;
                scanf("%d %d", &L, &R);
                sort(t+L, t+R+1);
            }
    
            int flag = 0;
    
            for(int i=1; i<=n; i++)
            {
                if(t[i] != i)
                {
                    flag = 1;
                    break;
                }
            }
    
            if(flag) puts("No");
            else puts("Yes");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    IDEA 2017 安装和破解
    Linux新增开放端口
    ping指定IP的指定端口号
    Ubuntu防火墙常用命令
    Ubuntu端口常用命令
    File Zilla连接Ubuntu 失败
    Docker常用命令详解
    Linux的vi常用命令详解
    Qt事件系统之二:鼠标事件和滚轮事件
    Qt事件系统之一:Qt中的事件处理与传递
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/5763141.html
Copyright © 2011-2022 走看看