1. 程式人生 > 實用技巧 >Acwing 103 電影 (map)

Acwing 103 電影 (map)

題面

莫斯科正在舉辦一個大型國際會議,有n個來自不同國家的科學家參會。

每個科學家都只懂得一種語言。

為了方便起見,我們把世界上的所有語言用1到109之間的整數編號。

在會議結束後,所有的科學家決定一起去看場電影放鬆一下。

他們去的電影院裡一共有m部電影正在上映,每部電影的語音和字幕都採用不同的語言。

對於觀影的科學家來說,如果能聽懂電影的語音,他就會很開心;如果能看懂字幕,他就會比較開心;如果全都不懂,他就會不開心。

現在科學家們決定大家看同一場電影。

請你幫忙選擇一部電影,可以讓觀影很開心的人最多。

如果有多部電影滿足條件,則在這些電影中挑選觀影比較開心的人最多的那一部。

輸入格式
第一行輸入一個整數n,代表科學家的數量。

第二行輸入n個整數a1,a2…an,其中ai表示第i個科學家懂得的語言的編號。

第三行輸入一個整數m,代表電影的數量。

第四行輸入m個整數b1,b2…bm,其中bi表示第i部電影的語音採用的語言的編號。

第五行輸入m個整數c1,c2…cm,其中ci表示第i部電影的字幕採用的語言的編號。

請注意對於同一部電影來說,bi≠ci。

同一行內數字用空格隔開。

輸出格式
輸出一個整數,代表最終選擇的電影的編號。

如果答案不唯一,輸出任意一個均可。

資料範圍
1≤n,m≤200000,
1≤ai,bi,ci≤109
輸入樣例:
3
2 3 2
2
3 2
2 3
輸出樣例:
2

思路

已知每個科學家知道的語言,然後給你每個電影的語言和字幕,要求哪部電影可以使得最多的科學家快樂。我們分析一下我們已有的資訊,每個科學家會的語言,我們應該如何處理這些資訊呢,想一想,如果我們在判斷哪部電影的時候,可以知道這個電影語言或者字幕可以使得多少科學家快樂,那麼我們是不是最後只需要條件判斷加上一個絕對值就好了。所以我們要處理科學家的語言資訊,用map去儲存一個語言有多少個科學家掌握,接下來就線性掃一遍判斷就好了。

#include<cstring>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
map <int,int> a;
const int maxn=2*1e5;
int n,m;
int b[maxn],c[maxn];
int read () {int x; cin>>x; return x; }
int main () {
    cin>>n;
    for (int i=1;i<=n;i++) {
        int x=read ();
        a[x]++;
    }
    cin>>m;
    for (int i=1;i<=m;i++) {   
       int x=read ();
       if (a.count (x)) b[i]=a[x];
    }
    for (int i=1;i<=m;i++) {
        int x=read ();
        if (a.count (x)) c[i]=a[x];
    }
    int ans=-1,maxb=-1,maxc=-1;
    for (int i=1;i<=m;i++) {
        int B=b[i];
        int C=c[i];
        if (B>maxb) {
            maxb=B;
            maxc=C;
            ans=i;
        }
        else if (maxb==B&&maxc<C){
            maxc=C;
            ans=i;
        }
    }
    cout<<ans<<endl;
    return 0;
}