103.电影

原题链接:103. 电影



解题思路

虽然语言的范围在int以内,但是这m部电影与n个人最多涉及 2(m+n) 种语言。我们把所有电影和人涉及的语言放进一个数组,排序并离散化,用一个 1~2(m+n) 之间的整数代替每种语言。此时我们就可以利用数组直接统计会上述每种语言的人的数量,从而选择满足题目要求的电影。时间复杂度为 O((n+m)log(n+m))

样例代码

#include<bits/stdc++.h>
using namespace std;
#define N 200010
map<int ,int> s;
int a[N];
int b[N];
struct zz 
{
    int a;
    int b;
}p[N];
int main()
{
    int n,m,i,j,k;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
        s[a[i]]++;
    }
    scanf("%d",&m);
    for(i=1;i<=m;i++)
        scanf("%d",&p[i].a);
    for(i=1;i<=m;i++)
        scanf("%d",&p[i].b);
    int mm=0;
    k=1;
    for(i=1;i<=m;i++)
    {
        if(mm<s[p[i].a])
        {
            mm=s[p[i].a];
            k=i;
        }
    }
    int kk=0;
    for(i=1;i<=m;i++)
    {
        if(s[p[i].a]==mm)
        {
            if(kk<s[p[i].b])
            {
                kk=s[p[i].b];
                k=i;
            }
        }
    }
    printf("%d\n",k);
    return 0;
}
posted @ 2020-12-28 15:45  hnkjdx_react  阅读(90)  评论(0编辑  收藏  举报