• HDU 5821 Ball (贪心排序) -2016杭电多校联合第8场


    题目传送门

    题意T组数据,每组给定一个n一个m,在给定两个长度为n的数组ab,再给定m次操作,每次给定lr,每次可以把[l,r]的数进行任意调换位置,问能否在转换后使得a数组变成b数组

    题解:用结构体存储a数组,一共两个域,一个是值,一个是下标,这个下标指的是他最后应该在的位置即这个值在b数组中的下标。随后m次操作可以看做是对a数组lr这个区间进行msortsort是根据下标从小到大排序,这样会使得这个数向他应该在的位置偏移,就是把a数组往b数组上靠,该向左的向左去,该向右的向右去,如果最后的时候都偏移到了自己应该在的位置就是Yes,否则就是No。复杂度O(max((n*n),(m*n*log(n))))

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    struct D{
        int val;
        int next;
    }a[1005];
    bool operator < (D a,D b) {
        return a.next < b.next;
    }
    int tmp[1005];
    int main()
    {
        int T,n,m;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++) {
                scanf("%d",&a[i].val);
                a[i].next=-1;
            }
            for(int i=0;i<n;i++) {
                scanf("%d",&tmp[i]);
                for(int j=0;j<n;j++) {
                    if(a[j].val==tmp[i]&&a[j].next==-1) {
                        a[j].next = i;
                        break;
                    }
                }
            }
            int l,r;
            while(m--) {
                scanf("%d%d",&l,&r);
                sort(a+l-1,a+r);
            }
            bool y = true;
            for(int i=0;i<n;i++) {
                if(a[i].val!=tmp[i]) {
                    y=false;
                    break;
                }
            }
            if(y) puts("Yes");
            else puts("No");
        }
        return 0;
    }

    http://acm.hdu.edu.cn/showproblem.php?pid=5821

  • 相关阅读:
    STS 创建 Maven 项目填坑
    JeeSite | 访问控制权限
    《Spring + MyBatis 企业应用实战》书评
    MyBatis-Generator 用法介绍
    Java描述数据结构之链表的增删改查
    Java中的Object类的几个方法
    设计模式之策略模式(Strategy Pattern)
    设计模式之模板方法(Template Method)
    JeeSite | 数据分页与翻页
    day 19
  • 原文地址:https://www.cnblogs.com/Ritchie/p/5761913.html
Copyright © 2020-2023  润新知