題目鏈結
題意:有 n 個人,每個人會且僅會一種語言.有 m 個電影,電影語言分為 音訊語言 和 字幕語言,且同場電影的音訊語言和字幕語言不同.
當人**電影時,如果他會該電影的音訊語言,他會非常高興.
當人**電影時,如果他會該電影的字幕語言,他會比較高興.
現要求選擇一場電影,使得非常高興的人數最多,若解不唯一,則選擇比較高興人數最多,輸出該電影的編號.
對於:給出的資料:(1 ≤ n ≤ 200 000)(1 ≤ m ≤ 200 000) 每個人掌握的語言(1 ≤ ai ≤ 109) 對應電影的音訊語言
(1 ≤ bj ≤ 109) 對應電影的字母語言 (1 ≤cj ≤ 109)
解法:如果直接寫的話發現編譯會出錯,原因是 ai, bi, ci 的資料範圍太大,陣列開不下,我們的目的只是根據大小對ai,bi,ci來排序,只需要他們的相對大小,據此來重新編號,需要用到乙個方法離散化,離散化的步驟如下:**:將資料寫到乙個陣列 d 中
將陣列 d 進行排序(sort())
排序後對陣列 d 進行去重(unique())
當詢問元素的相對大小時,由於資料有序,我們可以採用二分查詢的方式查詢元素 x 的位置.
#include
#include
#include
#include
const
int maxn=
2e5+10;
typedef
long
long ll;
ll a[maxn]
,b[maxn]
,c[maxn]
,d[3
*maxn+10]
,num[maxn]
,len,n,m;
using
namespace std;
voidf(
)intw(
int x)
//二分查詢x在d中的位置
intmain()
} cout<}
解法:若是每塗一次就迴圈一次,太複雜會超時,所以需要用到差分陣列(字首和的逆運算),為此我看了一下大佬的差分陣列講解,數陣列a[i]即為所求氣球塗顏色的次數,那麼我們就用差分陣列的方法去求,假如現在對數列中區間[l,r]上的數加上x,第乙個受影響的差分陣列中的元素為a[l],即令a[l]+=x,那麼後面數列元素在計算過程中都會加上x;最後乙個受影響的差分陣列中的元素為a[r],所以令a[r+1]-=x,即可保證不會影響到r以後數列元素的計算。這樣我們不必對區間內每乙個數進行處理,只需處理兩個差分後的數即可.;**:
#include
#include
#include
using
namespace std;
const
int maxn=
100010
;int
main()
,k;while
(scanf
("%d"
,&n)!=0
)for
(int i=
2;i<=k;i++
)for
(int i=
1;i<=k;i++)
cout<<<
' ';
cout<}}
山師訓練賽1 21補題
乙個機場有若干架飛機,從t 1時刻開始起飛,但現在由於一些原因,必須從k 1開始重新安排飛機班次,每架飛機延誤都有乙個損失值,要使得每架飛機的損失值乘以延遲時間的和最小。一道貪心的題目,貪心策略是k 1之後的航班全部都按原時間起飛,k 1時刻損失最大的起飛,然後按除開按原時間起飛的航班,其他按從大到...
訓練賽 2023年1月16日訓練賽總結
訓練賽位址 rank 3 總結一下訓練賽的情況,53分鐘出6道水題以後暫列第一,手速其實還可以,狀態也不錯,不過之後可能就浮躁了,然後看題目也看不全,寫 也是缺三漏四。c題錯在沒有初始化陣列。wa1。d題沒有看資料範圍一看題就以為是最長上公升子串行,然後t了,然後重新看題目,才發現是每次上公升1的子...
1月21日訓練賽
把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,1 是同一種分法。input 第一行是測試資料的數目t 0 t 20 以下每行均包含二個整數m和n,以空格分開。1 m,n 10。output 對輸入的每組資料m和n,用一行輸出相應的k...