码迷,mamicode.com
首页 > 编程语言 > 详细

【题解】英雄数组

时间:2019-03-23 22:54:10      阅读:321      评论:0      收藏:0      [点我收藏+]

标签:eof   sed   print   spl   题解   ide   英雄   splay   lse   

题目描述

  英雄有两个数组A和B,两个数组的长度相同。英雄想要改变A,使得A和B距离尽量小。两个数组的距离指的是A和B有多少个对应位上的数字不相同。
  英雄有一堆板子,每个板子上面有一个数字,恰好可以遮挡数组的一个位置。英雄需要把这堆板子全用完,并且数组的同一个位置最多只能放一个板子。
  求最小的距离。

 

输入输出格式

输入格式

  第一行为数据组数。
  对于每组数据:
  第一行为两个正整数N,M。表示数组A和B的长度以及板子的数量。 1 <= M <= N <= 50
  第二行N个正整数为A数组。
  第三行N个正整数为B数组。
  第四行M个正整数为板子。
  每个数字都不超过1000。

 

输出格式

  对于每组数据,一行一个整数表示最小距离。

 

输入输出样例

输入样例

3
3 1
1 1 1
2 2 2
2
3 0
1 2 3
3 2 1

3 3
2 2 2
2 2 2
1 2 3

 

输入样例

2
2
2

 

题解

  很明显的t贪心:先尽可能把数字不相同的位置覆盖成相同的,再把数字相同的位置覆盖成相同的,最后尽可能把剩下的数字不相同的位置覆盖成不相同的,剩下的就只能把数字相同的位置覆盖成不相同的。

技术图片
#include <iostream>
#include <cstdio>
#include <cstring>

#define MAX_N (1000 + 5)
#define MAX_M (1000 + 5)
#define NUMBER (1000 + 5)

using namespace std;

int G;
int n, m;
int a[MAX_N], b[MAX_N];
int c[NUMBER];
int ans;

int main()
{
    scanf("%d", &G);
    int tmp, tot;
    while(G--)
    {
        memset(c, 0, sizeof c);
        scanf("%d%d", &n, &m);
        ans = n;
        tot = 0;
        for(register int i = 1; i <= n; ++i)
        {
            scanf("%d", a + i);
        }
        for(register int i = 1; i <= n; ++i)
        {
            scanf("%d", b + i);
            if(a[i] == b[i]) --ans;
            else ++tot;
        }
        for(register int i = 1; i <= m; ++i)
        {
            scanf("%d", &tmp);
            ++c[tmp];
        }
        for(register int i = 1; i <= n; ++i)
        {
            if(a[i] != b[i] && c[b[i]])
            {
                --c[b[i]];
                --tot;
                --m;
                --ans;
            }
        }
        for(register int i = 1; i <= n; ++i)
        {
            if(a[i] == b[i] && c[b[i]])
            {
                --c[b[i]];
                --m;
            }
        }
        printf("%d\n", ans + max(0, m - tot));
    }
    return 0;
}
参考程序

 

【题解】英雄数组

标签:eof   sed   print   spl   题解   ide   英雄   splay   lse   

原文地址:https://www.cnblogs.com/kcn999/p/10585824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!