zoukankan      html  css  js  c++  java
  • hdu 5821 Ball (贪心)

    Ball

    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 1 leq i leq n, 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

    贪心的策略是让A数组中的数更接近正确位置,正确位置是A数组中的数在B数组中出现的第一个未被标记的位置,让数接近正确位置的贪心就是对于每个区间sort。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1010;
    int a[maxn], b[maxn];
    int id[maxn];
    int main() {
        int t;
        scanf("%d", &t);
        while(t--) {
            int n, m;
            scanf("%d %d", &n, &m);
            memset(id, 0, sizeof(id));
            for(int i = 1; i <= n; i++) {
                scanf("%d", &a[i]);
            }
            for(int i = 1; i <= n; i++) {
                scanf("%d", &b[i]);
                for(int j = 1; j <= n; j++) {
                    if(!id[j] && a[j] == b[i]) {
                        id[j] = i;
                        break;
                    }
                }
            }
            for(int i = 1; i <= m; i++) {
                int l, r;
                scanf("%d %d", &l, &r);
                sort(id + l, id + r + 1);
            }
            int flag = 1;
            for(int i = 1; i <= n; i++) {
                if(id[i] != i) {
                    flag = 0;
                    break;
                }
            }
            if(flag) puts("Yes");
            else puts("No");
        }
    }
  • 相关阅读:
    bzoj 2618: [Cqoi2006]凸多边形
    BZOJ 4556 [Tjoi2016&Heoi2016]字符串
    BZOJ 4850 [Jsoi2016]灯塔
    BZOJ 2956: 模积和
    PHP 正则表达式
    Linux Centos6.5安装redis3.0 和phpredis
    linux 删除过期文件
    THINKPHP报错 _STORAGE_WRITE_ERROR
    THINKPHP 部署nginx上URL 构造错误
    Linux 修改mysql密码
  • 原文地址:https://www.cnblogs.com/lonewanderer/p/5767279.html
Copyright © 2011-2022 走看看