Codeforces 766 個人總結

2021-08-27 05:25:54 字數 2027 閱讀 3604

題目鏈結

a. mahmoud and longest uncommon subsequence

思維題。當且僅當a==b時輸出「-1」,不然輸出a,b中最長的那個。

可以這麼理解,如果a,b不相等,假設strlen(a)>=strlen(b),那我將a作為乙個串去和b比較,一定是不同字串。

b. mahmoud and a ********

英語不好,那個非退化三角形其實就是普通的三角形,退化三角形就是兩短邊之和等於第三邊,也就是一條線段。

sort一下,相鄰的比較一下就可以了。

c. mahmoud and a message

dp題。dp太差,看的大佬**。

對於第一問,我們用dp[i]表示前i位的方法數,那麼可以得到狀態轉移方程: dp

[i]=

∑j=1

idp[

j−1]

d p[

i]=∑

j=1i

dp[j

−1

]以為你總可以把從[j,i]這一段分在一起,那麼方法數就只由前j位決定,就是dp[j]。

第二問用乙個變數存一下就好,長度就是i-j+1的最大值。

第三問,其實和第乙個dp有著異曲同工之處,我們總是能將[j,i]這段分成一段,那麼分成子串數隻由前j位決定,就是dp2[j]。狀態轉移方程: dp

2[i]

=min

(dp[

0],d

p2[1

],..

.dp2

[i−1

])+1

d p2

[i]=

min(

dp[0

],dp

2[1]

,...

dp2[

i−1]

)+

1用乙個lim表示當前子串必須小於的長度即可。

#include 

using

namespace

std;

const

int n = 2e3;

const

int mod = 1e9+7;

int n, dp[n], dp2[n], a[n];

char s[n];

int main(int argc, char

const *argv)

}printf("%d\n%d\n%d\n", dp[n], mmax, dp2[n]);

return

0;}

d:

給出n個單詞,m次操作,q次查詢。

操作有兩種,一種是兩種為同義詞,另一種是 兩種為反義詞。

如果操作不與之前形成的關係衝突,輸出yes,否則輸出no。

查詢:給兩個單詞求它們的關係,同義詞輸出1,反義詞輸入2。

用0表示與根節點同義,1表示反義。

重要的還是find函式,在剛經過merge後,並查集的結構可能不是一顆只有兩層的樹,但是下一步無論是查詢還是操作都有一步find,這樣會把並查集的結構變成一顆最多只有兩層的樹,星形的,並且更新了每個節點與根節點的關係。

#include 

using

namespace

std;

const

int n = 2e5;

int n, m, q, val[n], pre[n];

map dic;

string word;

int find(int x);

void merge(int d, int x, int y);

int main(int argc, char

const *argv)

int d;

string x, y;

while(m--)

while(q--)

return0;}

int find(int x)

void merge(int d, int x, int y) else

}

2006 10 12個人感悟

1。要真正掌握計算機系統,需要對計算機的發展和組成由相當的了解,也許這不是乙個容易的過程,但必須是乙個前進的方向。每次遇到技術瓶頸,如果能夠重新學習計算機系統的知識,必定會有另外的發現。例如多看看 深入理解計算機系統 2。通過軟體我們實現邏輯表達,通過硬體我們真正完成控制實質。從某些程度上講,硬體和...

2016 1 12個人總結

總結一下 1.類方法與例項方法 減號 代表例項方法,它在類的乙個具體例項範圍內執行,也就是說,你咋呼叫這個方法之前必須先建立乙個類的例項 加號 代表類方法,可以通過類名直接呼叫,不需要建立乙個類的例項。呼叫 例項方法 例項物件 方法名 如 yjview yv yjview alloc init yv...

2016個人總結

個人總結 忙碌的2016年在公司總結大會圓滿的畫上了句號。自己在csdn上寫一些總結。二 在工作上不要聽信任何人,要將問題鑽研透徹。只有這樣才能真正的懂了。只有這樣才能在遇到問題時為自己找到話語權。三 自己在工作上有拖延的問題,我認為還是由於不夠重視造成的。手頭上快一些,留出時間幹自己想幹的事情。四...