problem
莫斯科正在舉辦乙個大型國際會議,有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
輸入樣例:
32 3 2
23 2
2 3輸出樣例:2
solution
#include
using
namespace std;
const
int maxn =
2e5+10;
int a[maxn]
, b[maxn]
, c[maxn]
, sum[maxn]
;int cnt, arr[maxn*3]
;void
discrete()
intquery
(int x)
intmain()
int m; cin>>m;
for(
int i =
1; i <= m; i++
)for
(int i =
1; i <= m; i++
)//solve
discrete()
;int ans =
0, bt =-1
, ct =-1
;for
(int i =
1; i <= n; i++
)sum[
query
(a[i])]
++;//會每種語言的人數
for(
int i =
1; i <= m; i++
)else
if(sum[x]
==bt && sum[y]
>ct)
} cout
}
AcWing 103 電影 離散化
題目鏈結 沒什麼好說的,就照著題意做就行了,不過要最後輸出的編號是電影在c或者d陣列裡的下標而不是值。之前用unordered map跑了1500ms,這個跑了350ms,常數真是個可怕的東西 const int maxn 2e5 10 int a maxn b maxn c maxn d maxn...
離散化 電影
n 個科學家每個科學家只懂得一門語言,所有語言用 1 sim 10 的數字進行標號,m 部電影,每部電影的語音和字幕採用不同的兩種語言,所有科學家看同一部電影,如果乙個科學家能聽懂語音很開心,看懂字幕比較開心,都不懂不開心 選擇一部電影,很開心的人數最多,很開心的人數相同時比較開心的盡量多 begi...
科學家看電影(離散化)
離散化的方法大致有兩種 利用c 中的stl 直接利用陣列來儲存離散化後的資料 本題我們採用第二種。先分析一下題目大意 n位科學家去看電影,電影院上映了m部電影,每個科學家只會一種語言,先輸入科學家的人數n 可能有多個科學家懂同一種語言 在輸入科學家懂的語言,輸入電影院上映的電影數量m,接下來的一行輸...