2019ICPC亞洲區域賽徐州網路賽

2021-09-26 23:53:24 字數 2372 閱讀 1644

題意:有兩種操作:[1, x]表示將x這個點標記,[2, x]表示查詢x後面第乙個未被標記的數。

思路:q的值比較小,所以解題應該從q入手,用並查集模擬實現乙個鍊錶,用map模擬並查集。當標記乙個點x時,令x的父親等於x+1的父親,查詢時直接輸出x的父親即可。

accepted code:

/*

* @author: lzyws739307453

* @language: c++

*/#include

using

namespace std;

unordered_map <

int,

int> fa;

intgetf

(int v)

void

merge

(int u,

int v)

intmain()

return0;

}

題意:給定乙個整數w表示西瓜的重量,切成兩半之後每一部分都是2的倍數公斤(一直翻譯成1的兩倍)。如果 滿足要求輸出yes,否則輸出no。

思路:判斷w是否能被2整除,另外還需要考慮w的值不能為2(分成兩半之後各自為1,不是2的倍數)。

accepted code:

/*

* @author: lzyws739307453

* @language: c++

*/#include

using

namespace std;

intmain()

題意:判斷主串t和子串s的關係。

思路:由於q∗(

∣s∣+

∣t∣)

≤1e7

q ∗ (|s| + |t|) ≤ 1e7

q∗(∣s∣

+∣t∣

)≤1e

7, 對於每一次詢問,用kmp判斷即可。

accepted code:

/* 

* @author: lzyws739307453

* @language: c++

*/#include

using

namespace std;

const

int maxn =

1e5+5;

int nex[maxn]

;char str[maxn]

, st[maxn]

;void

next

(char str,

int len)

}bool

kmp(

char sa,

int la,

char sb,

int lb)

return

false;}

intmain()

else

if(len > la)

else

}return0;

}

題意:給定乙個序列,從每乙個數後面比它大至少 m 的數中求出與它之間最大的距離,如果沒有則為−1。

思路:從後向前維護乙個遞增的佇列,從後往前遍歷,若當前的數大於隊尾就進隊,否則從該佇列中二分找最小的比自己大至少m的數,二者之間的距離即為答案。若當前數小於隊尾,那這個數一定沒有隊尾的數優,因為它既比隊尾的數靠前,又比它小。

accepted code:

/*

* @author: lzyws739307453

* @language: c++

*/#include

using

namespace std;

const

int maxn =

5e5+5;

int p[maxn]

, q[maxn]

, s[maxn]

, spt[maxn]

;int

main()

else

}for

(int i =

1; i <= n; i++

)printf

("%d%c"

, s[i]

,"\n "

[i != n]);

return0;

}

2019ICPC徐州網路賽

theme n個數編號為1 n,兩種操作 1 x 將編號為x的數置為不可得,2 x 詢問x位置及其後第乙個可得數的編號。1 n,x 1e9,1 q 1e6 solution 首先想到用線段樹維護。初始時線段樹每個l r位置的值為l,1 x操作對應將x位置值置為inf,2 x 操作相當於查詢區間 x,...

ICPC練習 2021ICPC亞洲區域賽南京

感覺刷cf遇到了一點瓶頸,開啟真題練習計畫。比賽鏈結 a比較簡單的構造,上下和左右分開,乙個方向先用n 1次移動到距離目標更近的一段端點再同步移動。保證小於3 n 1 次 c考慮到答案是乙個數 乙個數 k 那麼我們掃過去的時候記錄一下哪個時候這兩個數的差分最大,通過這個差分調大某乙個數的個數 差分是...

2019 icpc 上海區域賽

第二次參加,很慘,2道題打鐵,罰時太多了,先寫的 k 題,不過沒寫對,然後以最快的速度完成了 b 題,不夠已經過去了一段時間了 k 題很快從基環發現是二分樹,但是錯了後才發現,如果完全圖過不了,我應該早點測那個樣例,長了教訓,最後暴力過了,雖然看到資料就知道是可以暴力過,但隊友沒那麼寫,還是最後發現...