2020 05 23日常總結

2021-10-06 09:54:58 字數 1883 閱讀 9092

【題意】:

\color}

【題意】:

【思路】:

\color}

【思路】:

我國偉大的數學家華羅庚說過:「退,足夠地退,退到最原始而不失重要性的地方,那是學號數學的乙個訣竅。」

這句話意思是當我們想不出正解時,我們可以先考慮這題的簡化形式,然後再逐步轉移到正解。這句話當然也可以用到 oi

\texttt

oi 上,比如這題。

簡化情況

\color}

簡化情況

我們先考慮 n=2

n=2n=

2 時的情況。即兩行的數列分別為 a,b

\texttt

a,b。

首先將 a,b

\texttt

a,b 從小到大排序,這樣做可以簡化我們對問題的處理(這也是乙個非常常用的技巧)。

如何求 n=2

n=2n=

2 時的解呢?我們列舉 i,j

i,ji,

j,表示我們考慮將 ai+

bj

a_i+b_j

ai​+bj

​ 加入我們的候選佇列中,分情況討論:

考慮如何快速地維護上述操作。我們發現,我們可以用乙個大根堆維護這個所謂的候選佇列。為什麼是大根堆?因為用大根堆可以很方便地刪除最大的元素。

這樣,我們就搞定了 n=2

n=2n=

2 時的情況。

回到原題

\color}

回到原題

如何從 n=2

n=2n=

2 的情況轉移到 n

>

2n>2

n>

2 時的情況呢?

很簡單,我們把前 2

22 行的答案放入乙個陣列 c

cc 中,把第 i

ii 行(i

ii 表示當前處理的行號)的數放入陣列 d

dd 中。然後就回到了 n=2

n=2n=

2 時的情況。

【**】:

\color}

【**】:

struct big_root_heap

inline

void

push

(int x)

}//在大根堆中加入乙個元素

inline

void

pop()}

//在大根堆中刪除最大值(即根)

inline

intsize()

inline

inttop()

}q;int n,m,k,a[

830]

,b[830];

inline

void

calc_first_kth()

else

break

;//否則,直接進入下層迴圈,優化,否則tle

for(

int i=

1;i<=k;i++

) a[k-i+1]

=q.top()

,q.pop()

;}intmain()

for(

int i=

1;i<=k;i++

)printf

("%d "

,a[i]);

return0;

}幾個需要注意的地方:

1. 這道題不能用 stl,否則會 tle,必須手寫大根堆

2. 建議大家把資料結構分裝到乙個結構體或類中,如果需要用到多個同一資料結構時,優勢明顯。

3.calc_first_kth

() 中的 else

break 不能少,否則會 tle

4. 本程式沒有反作弊系統

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...

2019 10 01日常總結

前言 今天是祖國母親70歲生日,請允許我向祖國母親說一聲 生日快樂!願您永遠繁榮昌盛 山清水秀!題意 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n nn個房間,並且有n 1 n 1n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...