题解英雄数组

Posted kcn999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解英雄数组相关的知识,希望对你有一定的参考价值。

题目描述

  英雄有两个数组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
", ans + max(0, m - tot));
    }
    return 0;
}
参考程序

 

以上是关于题解英雄数组的主要内容,如果未能解决你的问题,请参考以下文章

算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解

算法零基础学习关于二维数组的一些基础练习题 | leetcode1672158283248题解

[洛谷P1196]银河英雄传说

BZOJ 1191 超级英雄 Hero 题解

银河英雄传说

题解 洛谷 P1196 [NOI2022] 银河英雄传说