AcWing 103 電影(離散化)

2021-10-10 19:05:44 字數 1575 閱讀 9682

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,接下來的一行輸...