• HDU 5821 Ball (贪心)


    Ball

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 1079    Accepted Submission(s): 648

    Problem Description
    ZZX has a sequence of boxes numbered 1,2,...,n. Each box can contain at most one ball.

    You are given the initial configuration of the balls. For 1in, if the i-th box is empty then a[i]=0, otherwise the i-th box contains exactly one ball, the color of which is a[i], a positive integer. Balls with the same color cannot be distinguished.

    He will perform m operations in order. At the i-th operation, he collects all the balls from boxes l[i],l[i]+1,...,r[i]-1,r[i], and then arbitrarily put them back to these boxes. (Note that each box should always contain at most one ball)

    He wants to change the configuration of the balls from a[1..n] to b[1..n] (given in the same format as a[1..n]), using these operations. Please tell him whether it is possible to achieve his goal.
     
    Input
    First line contains an integer t. Then t testcases follow. 
    In each testcase: First line contains two integers n and m. Second line contains a[1],a[2],...,a[n]. Third line contains b[1],b[2],...,b[n]. Each of the next m lines contains two integers l[i],r[i].

    1<=n<=1000,0<=m<=1000, sum of n over all testcases <=2000, sum of m over all testcases <=2000.

    0<=a[i],b[i]<=n.

    1<=l[i]<=r[i]<=n.
     
    Output
    For each testcase, print "Yes" or "No" in a line.
     
    Sample Input
    5
    4 1
    0 0 1 1
    0 1 1 1
    1 4
    4 1
    0 0 1 1
    0 0 2 2
    1 4
    4 2
    1 0 0 0
    0 0 0 1
    1 3
    3 4
    4 2
    1 0 0 0
    0 0 0 1
    3 4
    1 3
    5 2
    1 1 2 2 0
    2 2 1 1 0
    1 3
    2 4
     
    Sample Output
    No
    No
    Yes
    No
    Yes
     
    Author
    学军中学
    Source
     

    题意:

    有N个盒子,每个盒子最多装一个球. 球的颜色不一定相同.
    现在要进行m次区间操作:
    每次操作 [l, r] 后可以随意将区间内的球重新分配回去.
    问经过上述操作后是否有可能达到给定的状态.

    题解:

    贪心.
    为每个球标记它在最终结果中的序号. 对于颜色相同的球:左边的尽量分配小的序号.
    对于m次区间操作,就将区间[l,r]中的球按最终序号排序.
    每次排序都相当于让区间中的球向它们的最终位置更近一步.
    最终再比较是否每个球都到位即可.

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    const int maxn=1111;
    int t;
    int n,m;
    int flag;
    struct node
    {
        int next;
        int color;
    }a[maxn];
    int cmp(node a,node b)
    {
        return a.next<b.next;
    }
    int l,r;
    int b[maxn];
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i].color);
                a[i].next=-1;
            }
            for(int i=0;i<n;i++)
            {
                scanf("%d",&b[i]);
                for(int j=0;j<n;j++)
                {
                    if(b[i]==a[j].color&&a[j].next==-1)
                    {
                        a[j].next=i;
                        break;
                    }
                }
            }
            for(int i=0;i<m;i++)
            {
                scanf("%d%d",&l,&r);
                sort(a+l-1,a+r,cmp);
            }
            flag=1;
            for(int i=0;i<n;i++)
            {
                if(a[i].color!=b[i])
                {
                    flag=0;
                    break;
                }
            }
            if(flag)printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    android监控来电显示
    android 选择本地图片并预览
    解决android http请求带中文参数会乱码(url编码)
    android连接webservice是cookies和session保持方法
    eclipse中android自动补全/提示卡机或假死
    JS中创建类得几种方式
    AJAX的简单实例应用
    JavaScript中的eval函数的用法
    JSON 入门指南
    JS中关于clientWidth、offsetWidth、scrollWidth
  • 原文地址:https://www.cnblogs.com/stepping/p/7204506.html
Copyright © 2020-2023  润新知