• hdu 5821 Ball


    题意:

    a,b两个包含n个整数(代表球的颜色)的数组,对a数组经过m次区间随意交换位置的操作后,看是否和b数组完全匹配!

    官方题解:

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

    /*by*/
    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <stack>
    using namespace std;
    typedef long long LL;
    const LL N=1010;
    const LL INF=0x3f3f3f3f;
    stack <char>s;
    typedef struct {
        int v,po;
    } by;
    by a[N];
    int b[N];
    bool cmp(by q,by w)
    {
        return q.po<w.po;
    }
    int main()
    {
        int T;
        cin>>T;
        while(T--) {
            int n,m,i,j;
            scanf("%d%d",&n,&m);
            for(i=1; i<=n; i++) {
                scanf("%d",&a[i].v);
                a[i].po=0;
            }
            for(i=1; i<=n; i++) {
                scanf("%d",&b[i]);
                for(j=1; j<=n; j++) {
                    if(!a[j].po&&a[j].v==b[i]) {
                        a[j].po=i;/*应在b数组中对应位置的下标*/
                        break;
                    }
                }
            }
            int x,y;
            for(i=1; i<=m; i++) {
                scanf("%d%d",&x,&y);
                sort(a+x,a+y+1,cmp);
            }
            bool flag=true;
            for(i=1; i<=n&&flag; i++) {
                if(a[i].v!=b[i])
                    flag=false;
            }
            if(flag)
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    SqlServer 格式化时间
    工作生活两三事
    前端面试题准备 3
    前端面试题准备 2
    MYSQL---自定义函数
    MYSQL---MD5()、PASSWORD()函数
    MYSQL---DATE_ADD()
    MYSQL---%
    MYSQL---多表删除
    MYSQL---CREATE...SELECT
  • 原文地址:https://www.cnblogs.com/yu0111/p/5765153.html
Copyright © 2020-2023  润新知