題目鏈結
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上寫一些總結。二 在工作上不要聽信任何人,要將問題鑽研透徹。只有這樣才能真正的懂了。只有這樣才能在遇到問題時為自己找到話語權。三 自己在工作上有拖延的問題,我認為還是由於不夠重視造成的。手頭上快一些,留出時間幹自己想幹的事情。四...