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; }