1. 程式人生 > 其它 >acwing 103. 電影

acwing 103. 電影

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

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

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

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

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

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

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

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

 列舉每個電影,找出使得最開心人數最多的一部以及次大值

用 cnt[ ] 存 語言i 對應的人數 ,i 要離散化

#include <bits/stdc++.h>
using
namespace std; const int N=2e5+5; int n,m; int a[N],b[N],c[N],cnt[3*N]; int bin[3*N],tt; int find(int x){ return lower_bound(bin+1,bin+1+tt,x)-bin; } void sov(){ int i; cin>>n; for(i=1;i<=n;i++) cin>>a[i],bin[++tt]=a[i]; cin>>m; for(i=1;i<=m;i++) cin>>b[i],bin[++tt]=b[i];
for(i=1;i<=m;i++) cin>>c[i],bin[++tt]=c[i]; sort(bin+1,bin+tt+1); tt=unique(bin+1,bin+1+tt)-bin-1; for(i=1;i<=n;i++) cnt[find(a[i])]++; int mxi=0,ans1=0,ans2=0; for(i=1;i<=m;i++){ int c1=cnt[find(b[i])],c2=cnt[find(c[i])]; if(c1>ans1||(c1==ans1&&c2>ans2)){ ans1
=c1; ans2=c2; mxi=i; } } if(mxi==0) cout<<1; else cout<<mxi; cout<<endl; } int main(){ sov(); }