集訓預備隊選拔day2

2021-09-27 11:40:54 字數 3641 閱讀 7547

a序列劃分-codeforces1197c

將非遞減的序列劃分成k段,使最右減最左的和最小。

和這種序列差值有關的,用差分來寫,就轉化成和的問題。

b轉移矩陣-poj3070

就是個模板題

#include

#include

using

namespace std;

const

int max =10;

#define ll long long

class

matrix

void

init()

void

unit()

//初始化為單位矩陣

intresult()

const

friend matrix operator*(

const matrix&

,const matrix&);

intpow

(int);

private

: __int64 map[max]

[max]

;int row, col;};

matrix operator*(

const matrix& m1,

const matrix& m2)

return m;

}matrix m(2

,2);

int matrix::

pow(

int n)

return m.

result()

;}intmain()

return0;

}

c思維-codeforces797c

感覺思維題,就是貪心,或者由事件的終點來直接推斷結果。(個人的一點想法…)

所以這題就是乙個貪心,不難,但很容易寫錯…wa了乙個多小時q-q

d模擬-openj_bailian3709

就是個模擬,簽到題

#include

#include

#include

#include

using

namespace std;

#define ll long long

intmain()

while

(tt)

cout << ans <<

"\n";}

}

e最近公共車站-codeforces832d

樹上lca

三個點,兩兩求lca,值異或,求出三個點的匯點。(為什麼這樣能求匯點呢,畫圖看看就知道了)

g生日序列-hdu4027

線段樹,注意當數變為1的時候就不用更新了,因此維護乙個最大值的樹,是1的時候就不用向下更新。

和codeforces有題挺像的哈

#include

#include

#include

#include

#include

#include

using

namespace std;

#define ll long long

const

int maxn =

100005

;const

int n =

1<<63;

ll maxx[maxn <<2]

;ll sum[maxn <<2]

;void

pushup

(int rt)

void

build

(int l,

int r,

int rt)

int m =

(l + r)

>>1;

build

(l, m, rt <<1)

;build

(m +

1, r, rt <<1|

1);pushup

(rt);}

void

update

(int l,

int r,

int l,

int r,

int rt)

int m =

(l + r)

>>1;

if(l <= m)

update

(l, r, l, m, rt <<1)

;if(m < r)

update

(l, r, m +

1, r, rt <<1|

1);pushup

(rt);}

ll query

(int l,

int r,

int l,

int r,

int rt)

intmain()

update

(l, r,

1, n,1)

;}else

printf

("%lld\n"

,query

(l, r,

1, n,1)

);}}

printf

("\n");

}}

h超神學院-poj1703

種類並查集/帶權邊,我更習慣用帶權邊來寫。

#include

#include

#include

using

namespace std;

int pre[

100005];

int sum[

100005];

intfindleft

(int n)

void

link

(int i,

int j,

int s)

else

}int

main()

else}}

}}

i打表題-lightoj-2370

尤拉函式打表題。以前好像寫過。

不是打尤拉函式的表,應該也打不下,是打素數的表,因為要滿足尤拉函式值盡可能大,且數值盡可能小數,肯定就是素數(在素數an右邊an+1左邊的合數b,b的尤拉函式值小於等於an的尤拉函式值)

#include

#include

#include

using

namespace std;

#define ll long long

const

int maxn =

1e6+5;

int prime[maxn]

;void

init()

}}intmain()

}}printf

("case %d: %lld xukha\n"

, cnt++

, ans);}

}

j t-shirts codeforces1000a

就是模擬,沒了。

省隊集訓DAY2

假設我們列舉數列中長度為len的區間,那麼如何判斷兩個數列可以匹配呢?對於提取的數列從小到大排序,從大到小排序,然後兩兩配對,如果所有的都滿足 h 那麼就可以匹配。應該算是貪心吧。這樣做的時間複雜度是o n le n loglen 還是上面的思想,我們如何快速判斷呢?假設我們確定了提取出的區間數列,...

2017國慶鄭州集訓Day2

搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題解空間的部分或所有的可能情況,從而求出問題的解的一種方法。現階段一般有列舉演算法 深度優先搜尋 廣度優先搜尋 a 演算法 回溯演算法 蒙特卡洛樹搜尋 雜湊函式等演算法。在大規模實驗環境中,通常通過在搜尋前,根據條件降低搜尋規模 根據問題的約束條件進...

牛客國慶集訓派對Day2

題意 給出最大4096 64和64 4096的矩陣,其中有乙個矩陣只含有0和1,問你它們相乘所得到得矩陣所有元素異或 思路 一開始我想到的是能不能將01矩陣的一排都用二進位制表示,但是發現2的64次方大於4096,反而增大了複雜度,於是沒有做出這題,題解是將矩陣分塊,最多分成8塊,這樣01矩陣的種數...