青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Climber.pI的OI之路

Through the darkest dark,may we see the light.

#

Problem List(2.6 ~ 3.19)

2.6

poj 3660[Floyd]
[題意]
給定n個(gè)點(diǎn), m條有向邊, 判斷有多少個(gè)點(diǎn)的位置唯一確定.
[做法]
從對(duì)每個(gè)節(jié)點(diǎn)的度分析入手. 利用Floyd傳遞閉包, O(N^3)足矣, 統(tǒng)計(jì)所有 入度+出度 = 頂點(diǎn)數(shù)-1 的點(diǎn)的個(gè)數(shù), 顯然如果一個(gè)點(diǎn)x, 與其他n-1個(gè)點(diǎn)的關(guān)系確定, 那么這個(gè)點(diǎn)的位置可以確定.
*一開(kāi)始從度的分析入手(這是對(duì)的, 但是要傳遞閉包), 之后認(rèn)為是拓?fù)渑判? 在這之后就沒(méi)有思路了. 但事實(shí)上這時(shí)候不應(yīng)該看題解, 至少應(yīng)該進(jìn)行30min的思考.
*傳遞閉包有O(N^2)的做法, 參見(jiàn)去年的shock, 大意是每增加一條邊(x, y), 對(duì)于任意(a, x), 使得(a, y)連通; 對(duì)于y的處理同理.

*每周的訓(xùn)練時(shí)間大致是周一下午, 周三一節(jié)課.

2.8

poj 3661[DP]
比較奇怪的DP, 去年查閱各種題解后A了, 今年還是不會(huì)做 = =|||
[狀態(tài)]f[i][j]表示第i秒后, 體力值為j時(shí)的可以到達(dá)的最大距離.
很自然的得到了第一個(gè)方程
f[i][j] = max{f[i-1][j-1] + d[i], f[i+j][0]}
很明顯兩個(gè)狀態(tài)要求的規(guī)劃方向矛盾.
于是自然的YY了一個(gè)錯(cuò)誤的方程
f[i][j] = max{f[i+1][j+1] + d[i], f[i+j][0]}
但事實(shí)上應(yīng)該這樣考慮
f[i][j] = f[i-1][j-1] + d[i]
f[i][0] = max{f[i-1][0], f[i-j][j]} (i-j >= j && j <= m) => (j <= min(i/2, m))
即對(duì)不同的規(guī)劃方向分別處理.
*本題的關(guān)鍵即對(duì)不同規(guī)劃方向的處理, 其實(shí)想一想不見(jiàn)得想不出來(lái)

2.13

poj 3663[數(shù)學(xué)/二分/枚舉], 1h
很簡(jiǎn)單的題目, 但是由于各種細(xì)節(jié)考慮不周, 連對(duì)拍在內(nèi)寫(xiě)了1h = =|||
[1] 顯然可以O(shè)(N^2)枚舉, 然后隨便排序一下, 就可以0.6s通過(guò)了.
[2] 我想到的一種很疼的O(N)做法
  (1) Cnt[n]表示1..n的值的個(gè)數(shù), 可以利用前綴和得到
  (2) 對(duì)于每個(gè)L_i, 累加Cnt[S - L_i] - (2*L <= S), 需要討論S - L_i >= Max{L_i} 和 S - L_I <= 0的情況
  (3) 顯然每對(duì)數(shù)都被計(jì)算兩次, 輸出ans/2即可
[3] 官方題解的O(NlogN)做法
  (1) 排序
  (2) 對(duì)于每個(gè)Lower, 計(jì)算滿足題目的最小Higher, 累加Higher - Lower即為答案

poj 3664[排序]
利用qsort對(duì)A[]間接排序, 然后利用O(K)的時(shí)間循環(huán)檢查最大值即可, 復(fù)雜度O(NlogN)

poj 3665[模擬]
很像是數(shù)據(jù)結(jié)構(gòu)題的小范圍寫(xiě)法 = =|||
按照題目模擬即可.

2.20

poj 3662[最短路+二分]
[題意]
給定N個(gè)點(diǎn), P條雙向帶權(quán)邊, 其中K條邊的權(quán)可以為0, 求最大邊權(quán)的最小值.
[做法]
根據(jù)描述很容易想到二分, 注意到題目對(duì)前K條邊的具體情況沒(méi)有要求. 用f(M)表示最大邊權(quán)為M時(shí)是否可行, 把邊權(quán)大于M的邊賦值為1, 小于M的邊賦值為0, 求最短路即可.
*這里并不能使用BFS求最短路, BFS僅在無(wú)全圖中可求最短路.
*注意二分的寫(xiě)法, 可以打出f(M)的值觀察條件
*注意無(wú)解和0的區(qū)別

3.5
MAR12 Silver[未實(shí)現(xiàn)]
P1
[Brief]
在1000*1000棋盤(pán)上從(x, y)到(1, 1), 給定N個(gè)定點(diǎn), 最少通過(guò)N個(gè)定點(diǎn)中的幾個(gè)點(diǎn).
[Solution]dij+heap, O(ElogV)
對(duì)每個(gè)點(diǎn)u, 如果其周圍有定點(diǎn)v則 w(u, v) = 1, 否則w(u, v) = 0. 易知|V| <= 4*1000^2, 直接求(x, y) 到 (1, 1) 的單源最短路即可.
P2
不會(huì)做...
P3
同上 > <

3.12
MAR12 Bronze[我墮落了...]
P1: std將17拆分為16+1, 從而避免了進(jìn)制轉(zhuǎn)換.
P2
[Brief]
從(0, 0)開(kāi)始, 僅在N個(gè)頂點(diǎn)可以轉(zhuǎn)彎(90或180), 求有多少序列可以僅經(jīng)過(guò)一次所有點(diǎn), 并回到原點(diǎn).
[Solution]
O(N!)生成序列, 直接利用坐標(biāo)判斷是否合法即可.
P3
[Brief]
給出一個(gè)序列(L <= 10^5), 每個(gè)字符可能是三個(gè)操作符F/L/R其中之一, FJ打錯(cuò)了一個(gè)字符, 試統(tǒng)計(jì)可能到達(dá)多少種不同的終點(diǎn).
[Solution]
(1) 掃描序列, 記錄每個(gè)點(diǎn)的位置, 可以得到任意兩點(diǎn)之間的向量. 
(2) 枚舉每個(gè)位置可能的錯(cuò)誤字符, location(n-1) + (n -> dimension)即為答案. 
(3) 記錄每個(gè)可行終點(diǎn), 利用排序去重.
總復(fù)雜度O(N+N+NlogN) = O(NlogN).

3.15
MAR12 Silver
flowerpot[Heap/二分+RMQ]
[Brief]
給定N個(gè)坐標(biāo), 滿足|y_j - y_i| >= D, 求|x_i - x_j|的最小值, 若不存在最小值則輸出-1.
*題目真心看不懂, 看了樣例才懂了.
[Solution]
[1] O(N^2)暴力枚舉每個(gè)坐標(biāo)
[2] O(NlogN)
  (1) 對(duì)x升序排序
  (2) 求出y的區(qū)間最大/小值
  (3) 二分|x_i - x_j|, 這里需要記錄對(duì)于每個(gè)x_i, x_i+D的位置(可能不存在)
-> 這個(gè)思路非常麻煩, 不可行
[3] O(NlogN), 利用Heap
和我最初的想法一致.
  (1) 對(duì)x升序排序
  (2) 對(duì)于每個(gè)x_i, 找到最近的x_j, 滿足|y_i - y_j| >= D
事實(shí)上(2)可以進(jìn)一步強(qiáng)化為|max{y} - min{y}| >= D, 也即若區(qū)間[i, j]滿足題意, 但|y_i - y_j|不滿足題意, 則其中必有子區(qū)間滿足|y_i - y_j| >= D
[譯自官方題解]
我們首先對(duì)所有點(diǎn)的x進(jìn)行排序, 然后利用一對(duì)豎直的掃描線, 從左至右遍歷整個(gè)平面. 一對(duì)掃描線之間的點(diǎn)的y值, 利用一個(gè)能夠快速查找最大/最小值的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ), 例如STL multiset(如我們?cè)谙挛乃褂?, 或者一對(duì)堆. 每當(dāng)最大和最小的y的差至少為D時(shí), 我們檢查此時(shí)是否得到目前位置的最優(yōu)結(jié)果, 之后將左掃描線向前移動(dòng). 否則, 我們將右掃描線向前移動(dòng). 算法總的運(yùn)行時(shí)間為O(NlogN).
*對(duì)(2)進(jìn)行強(qiáng)化后, 可以避免大量冗余操作
*強(qiáng)化后, (2)可以直接使用Sparse Table在O(1)得到最值. 效率應(yīng)略高于官方題解.

3.19
[利用qsort對(duì)結(jié)構(gòu)體排序]
int cmp(const void *a, const void *b){
    point *A = (point*)a, *B = (point*)b;
    return (A->x > B->x) ? 1 : -1;
}
*A是一個(gè)指針, *A = (point*)a表示把無(wú)類型指針a轉(zhuǎn)換為point型的指針
int cmp(const void *a, const void *b){
    int i = *(int*)a, j = *(int*)b;
return (i > j) ? 1 : -1;
}
i = *(int*)a表示先把無(wú)類型指針a轉(zhuǎn)換為int型的指針, 然后利用*得到指針?biāo)鶎?duì)應(yīng)的值

flowerpot[區(qū)間掃描+RMQ(Sparse Table)], 40min
(1) 對(duì)x升序排序(由于之后需要得到區(qū)間最值, 直接對(duì)結(jié)構(gòu)體排序, 而非間接排序)
(2) sprase_table
*f[i][j] = max{f[i][j-1], f[i + 2^(j-1)][j-1]}, 初始化f[i][0] = P[i].y
(3) 區(qū)間掃描, 初始區(qū)間[i = 1, j = 1]
  i) 若區(qū)間[i, j]滿足題意, 嘗試更新答案, ++i
  ii) 若區(qū)間[i, j]不滿足題意, ++j
  *對(duì)于操作i, 此時(shí)區(qū)間合法, 為了得到最短區(qū)間, 左指針右移.
  
landscape[DP, 編輯距離], 1h
[Brief]
給定一個(gè)長(zhǎng)度為N(N<=100)的序列, 序列中的每個(gè)元素權(quán)重為a_i(Σa_i <= 1000), 對(duì)A_i加1需要付出代價(jià)X, 對(duì)a_i減1需要付出代價(jià)Y, 把1個(gè)單位從a_i移動(dòng)到a_j需要代價(jià)(j-i)*Z, 求把序列a_i變換為序列b_i(Σb_i<=1000)的最小代價(jià).
[Solution]
[1] 最初由N的范圍猜測(cè)是DP, 用f[i][j]表示前i-1個(gè)元素已符合題意時(shí), 第i個(gè)元素權(quán)重為j時(shí)的代價(jià). 遂發(fā)現(xiàn)此時(shí)存在后效性, 無(wú)果而終. 進(jìn)而猜測(cè)可能是網(wǎng)絡(luò)流模型, 參看題解.
*和GDKOI 2012 Day1一樣, 最初的想法是正確的, 略深入的想法是錯(cuò)誤的, 但此時(shí)切換角度思考就能得到正確結(jié)果.
[2] 換一種角度, 我們考慮每個(gè)代價(jià)的位置序列A_i, 變換為B_i. 序列A_i和B_i單調(diào)不降. 考慮到題目中的三種操作, 套用"編輯距離"模型.
[狀態(tài)] f[i][j]表示A_1..i和B_1..j符合題意時(shí)的最小代價(jià)
[方程] f[i][j] = min{f[i-1][j] + Y, f[i][j-1] + X, f[i-1][j-1] + Z*|A[i] - B[j]|}
[初值] f[i][0] = Y*i, f[0][j]= X*j
*對(duì)于確定大致方向的題目, 可以分別考慮題目中涉及的幾個(gè)量, 進(jìn)而得到解法.

posted @ 2012-03-19 18:49 Climber.pI 閱讀(166) | 評(píng)論 (0)編輯 收藏

Problem List(1.25 ~ 2.1)

//GDKOI 2012之前涉及的題目, 由此可見(jiàn)寒假真的什么都沒(méi)做

1.25

air[二分圖最大匹配 -> 最大流], 1h
[建圖]
(1) 在飛行員u和外籍飛行員v間增加有向邊(u,v), 同時(shí)增加源S到u的邊(S,u), 以及v到匯T的邊(v,T).
(2) 考慮到n<=100, 利用鄰接矩陣存儲(chǔ), 上文增加邊容量為1, 其余為0, S到T的最大流即為答案.
(3) 直接利用map記錄u和v的對(duì)應(yīng)關(guān)系
*數(shù)據(jù)的方案似乎不是最小字典序, 此外題目中未涉及方案的順序問(wèn)題, 暫不考慮.

path[最小路徑覆蓋 -> 二分圖最大匹配 -> 最大流], 1h
注意到在路徑覆蓋中, 每個(gè)點(diǎn)只能被覆蓋一次. 
[建圖]
將每個(gè)點(diǎn)拆分, 然后源S和匯T分別連邊, 點(diǎn)間按照題目要求連邊, 求最大流f即可.
顯然如果要增加一個(gè)路徑覆蓋, 必須存在某點(diǎn)沒(méi)有前驅(qū)(或后繼), n-f即為所求.
[輸出方案]
利用flow數(shù)組從1開(kāi)始遍歷, 用vis標(biāo)記已訪問(wèn)點(diǎn)即可.

某題 by ftiasch
Given two sorted arrays A, B of size m and n respectively. Find the k-th smallest element in the union of A and B. You can assume that there are no duplicate elements.
http://www.leetcode.com/2011/01/find-k-th-smallest-element-in-union-of.html
[O(log(n+m))做法]
你假設(shè)求第k大嘛, 肯定是這邊來(lái)前i個(gè), 那邊來(lái)前j個(gè). 然后二分i, 就有j了. 然后check一下合法否.

1.27

poj 2976[分?jǐn)?shù)規(guī)劃 -> 參數(shù)搜索]
[定義]一般地, 求max{a(x)/b(x)}, a(x) b(x)是實(shí)值函數(shù), 且b(x)>0.
特別地, 如果max{a(x)/b(x)} ∈ (0,1), 稱為0/1分?jǐn)?shù)規(guī)劃
[解法]
不妨設(shè)lambda即為所求.
顯然滿足 a(x)/b(x) >= lambda (注意大于等于號(hào))
整理可得 a(x) - b(x)*lambda >= 0
顯然存在任意x值滿足lambda即可, 比如在這種情況下可以求函數(shù)最大值, 若最大值不滿足, 那么顯然這個(gè)lambda不會(huì)得到滿足.
設(shè)g(lambda) = max{a(x) - lambda*b(x)}
分析可知:
g(λ) > 0 <=> λ' < λ
g(λ) = 0 <=> λ' = λ
g(λ) < 0 <=> λ' > λ
轉(zhuǎn)換為0/1分?jǐn)?shù)規(guī)劃后, lambda ∈ (0, 1), 可以二分lambda, 注意a(x)和b(x)的求法因題目而異.
*比如最優(yōu)比率生成樹(shù)問(wèn)題
*可以利用qsort直接對(duì)double排序, 寫(xiě)法和int一致, 需要注意排序時(shí)return x > 0 ? 1 : -1;不要返回0
*對(duì)于浮點(diǎn)誤差, EPS = 1e-8, 越小越好(時(shí)間代價(jià)?)

1.31

GDKOI 2010分析[未驗(yàn)證]
30 + 20 + 12 + 12 = 74
30 + 40 + 20 + 12 = 102
考慮到實(shí)際情況, 以及對(duì)拍時(shí)間, 似乎150+并非不可能.
Day1
[1]load
AC, 改變松弛條件的最短路, 可以使用Floyd
[2]goodjob
30%, 裸DFS
AC, 狀壓DP
[3]pizza
30%-50% 亂搞, 利用最大m段和或者分?jǐn)?shù)規(guī)劃
AC 利用周期數(shù)列的性質(zhì)?不明.
[4]plan
30% 暴搜?
AC 費(fèi)用流
Day2
[1]collection
數(shù)學(xué)題, 通過(guò)簡(jiǎn)單的變形得到函數(shù), 可以利用三分法或者Cauthy不等式求解
[2]cook
10% 暴搜, 生成全排列
AC 4維DP
[3]table
50% BFS
AC 雙向BFS
[4]push
30% 模擬
AC 利用掃描線思想, 對(duì)坐標(biāo)排序[具體不明...]

GDKOI 2011分析[未驗(yàn)證]
30 + 20 + 8 + 12 = 70
24 + 20 + 12 + 12 = 68
考慮到考場(chǎng)上可能的問(wèn)題, 大概能保證100.
Day1
[1]sewer
DFS/BFS/...隨便模擬
*小數(shù)據(jù)驗(yàn)證
[2]park
50% 對(duì)于每個(gè)長(zhǎng)方形, 枚舉每棵樹(shù)是否在其上, O(NM)
AC 通過(guò)某種操作把驗(yàn)證某個(gè)樹(shù)在某個(gè)矩形上, 由O(N)降至O(logN), 比如平衡樹(shù)
*小數(shù)據(jù)驗(yàn)證, 如果構(gòu)造AC算法必須對(duì)拍
[3]mission
20% 模擬
AC T_T我不會(huì)
[4]move
30% BFS
AC A*/狀壓DP
*小數(shù)據(jù)驗(yàn)證
Day2
[1]weight
30% DFS, O(3^N)
AC 分成兩堆, 分別進(jìn)行DFS, 然后對(duì)于每個(gè)砝碼組合m, 在另外一堆里找n, 使得m+n滿足題意即可.
*兩種思路對(duì)拍
[2]ponytail
50% 簡(jiǎn)單分析之后利用整除性和打表暴力
AC 進(jìn)一步的分析, 利用歐拉函數(shù)求解
根據(jù)題意
s >= x + y ...(1)
1/x + 1/y = 1/z ...(2)
由(2)可得, x+y | xy ...(*)
設(shè)(x, y) = d
可得x = d * x1, y = d * y1
代入(*)可得 x1+y1 | dx1y1
易證x, y分別和x+y互質(zhì)
令d = t(x1 + y1), 代入即得
s = x + y = t(x1 + y1)^2
令n = x1 + y1, 顯然滿足題意的n的個(gè)數(shù)為歐拉函數(shù)φ(n), 滿足題意的t的個(gè)數(shù)為[S/n]
綜上可得, Σφ(n)*[S/n]即為所求.
[3]bright
30% 最大流
AC T_T我不會(huì)
[4]eight
30% DFS
AC 狀壓DP
=> 導(dǎo)出結(jié)論, 主要復(fù)習(xí)暴搜, 其次復(fù)習(xí)基本算法, 如圖論若干, ST等.

2.1
rqnoj 70 八數(shù)碼難題[BFS+hash], 2h
BFS實(shí)現(xiàn), 利用hash判重(簡(jiǎn)單的取余法)
*移動(dòng)步驟考慮不周, 可以直接利用數(shù)組存儲(chǔ), 四個(gè)方向分別為±1或3; 需要注意±1, 即左右移動(dòng)后, 0必須在同一行
*hash寫(xiě)錯(cuò)

雙向廣搜, 擴(kuò)展完一邊的該層節(jié)點(diǎn), 再擴(kuò)展另一邊的一層節(jié)點(diǎn), 直到兩邊狀態(tài)相遇.
http://longxiaozhi.is-programmer.com/posts/24858.html
實(shí)現(xiàn)無(wú)能, 遂放棄.

posted @ 2012-03-19 18:48 Climber.pI 閱讀(117) | 評(píng)論 (0)編輯 收藏

GDKOI 2012及其他

一周之前的此時(shí), 我應(yīng)該在廣州的地鐵上, 帶著悵然若失.
41 + 58 = 99, 二等分?jǐn)?shù)線102, 其實(shí)也沒(méi)什么可說(shuō)的, 寒假?zèng)]干正事, 結(jié)局如此確是正常.
本來(lái)打算寫(xiě)點(diǎn)東西, 現(xiàn)在看最近幾天完成這個(gè)難度有點(diǎn)大, 這個(gè)月抽時(shí)間寫(xiě)吧.

"心中隨生一種風(fēng)云際會(huì)但終將風(fēng)流云散的感覺(jué)"

Day2結(jié)束的時(shí)候, 看著wx神牛的成績(jī)單, 無(wú)比詫異, 雖然帶著一大堆行李, 卻也去復(fù)評(píng)了一吧. 反正沒(méi)機(jī)會(huì)再以選手身份來(lái)了, 倒不如把流程都體驗(yàn)一遍.
這幾天漸漸的開(kāi)始籌劃CMOp了, 其實(shí)也就半年而已, 我也不知道自己能走多遠(yuǎn). 漸漸的回憶起了以前不長(zhǎng)的MO生涯, 刪了一下午文件, 刪著刪著又悵然若失了. 現(xiàn)在聽(tīng)輕音樂(lè)又和NOIp前一樣, 又開(kāi)始覺(jué)得一股絕望溢出胸口.

而我, 卻不知道憂傷從何而來(lái).

posted @ 2012-02-11 20:25 Climber.pI 閱讀(280) | 評(píng)論 (0)編輯 收藏

Problem List(11.19 ~ 12.26)


11.19

poj 1258[Kruskal]
和training的那題一樣, 注意有多組數(shù)據(jù)
*數(shù)組開(kāi)錯(cuò), 沒(méi)有區(qū)分MAXn/MAXedge

11.21

poj 1944[DP], unAC
沒(méi)看出來(lái)是DP.
網(wǎng)上有兩種做法:
 (1) 三維DP
 (2) 兩個(gè)二維DP

快速讀入 by gXX
int getInt() {
 char ch = getchar();
 while (ch < '0' || ch > '9') ch = getchar();
 int ret = 0;
 while ('0' <= ch && ch <= '9') {
  ret = ret * 10 + ch - '0';
  ch = getchar();
 }
 return ret;
}
qc #20:
 getInt(), 0.06s
 fscanf(), 0.2s
 fstream, 0.35s
 
11.28

馬走日問(wèn)題[回溯], 1h
*lrp問(wèn)了, 昨晚隨便敲了一下, 發(fā)現(xiàn)想得亂七八糟, 果然要想清楚問(wèn)題再敲.
求(1, 1)到(m, n)的路徑數(shù), 注意回溯邊界即可.

NOIp2011P, 統(tǒng)計(jì)單詞數(shù)[字符串], 1h
讀入文章中的每個(gè)單詞, 轉(zhuǎn)換大小寫(xiě)后, 和已知目標(biāo)單詞比較. 記錄相同單詞數(shù), 及每個(gè)單詞的首字母在文章中位置即可.
*trick:
(1)文章中單詞間可能存在多個(gè)空格, 因而需要讀入每個(gè)字符
-> 需要注意的是, 需要?jiǎng)h除pdf樣例中多余的空格
(2) 文章中的單詞長(zhǎng)度可能遠(yuǎn)大于目標(biāo)單詞長(zhǎng)度
*很像叉姐第一次模擬題的第一題

NOIp2011P, 瑞士輪[雙關(guān)鍵字排序], 60, 40min
*樣例說(shuō)明很詳細(xì)
需要注意雙關(guān)鍵字排序和間接排序的區(qū)別:
(score[i] < score[j] || (score[i] == score[j] && i > j))
這里直接比較i和j, 而非id[i]和id[j].
*我覺(jué)得我這么廢都能一等就是一個(gè)奇跡.. >_<

11.30

NOIp2011T, 選擇客棧[數(shù)學(xué)], 2h
(1) 注意到各顏色間相互獨(dú)立, 不妨單獨(dú)處理
(2) 題目要求找到區(qū)間中存在任意滿足條件點(diǎn)的區(qū)間個(gè)數(shù), 即所有子區(qū)間的個(gè)數(shù)減去連續(xù)不滿足條件的區(qū)間個(gè)數(shù)
*邊界各種掛, 調(diào)試無(wú)能

12.5

NOIp2011P, 瑞士輪, 1h
*非常心不在焉
*注意靜態(tài)查錯(cuò) -> 如果出現(xiàn)循環(huán), 大部分正確, 最后出現(xiàn)錯(cuò)誤的情況, 極有可能是打錯(cuò)變量.
*注意數(shù)組的實(shí)際意義, 如存儲(chǔ)標(biāo)號(hào)還是值
(1) 以force[]為第一關(guān)鍵字降序, id[]為第二關(guān)鍵字升序排序
(2) 注意到過(guò)程中只有N個(gè)元素+1, 其余N個(gè)元素不變, 且對(duì)于變化或者不變的元素, score[]單調(diào)遞減
故而對(duì)于每組選手(i, j), 利用隊(duì)列A[]存儲(chǔ)勝利選手, 隊(duì)列B[]存儲(chǔ)失敗選手
(3) 按照雙關(guān)鍵字合并隊(duì)列A[]和B[]
(4) 將(2)(3)進(jìn)行R輪, 輸出id[Q]即可

NOIp2011T, 選擇客棧, 1h
(1) 利用鄰接表(數(shù)組實(shí)現(xiàn)), 按顏色存儲(chǔ)客棧; 利用前綴和sum[i]表示1..i中cost_i <= p的客棧個(gè)數(shù)
(2) 對(duì)于每種顏色的每個(gè)區(qū)間預(yù)處理part[], 表示該區(qū)間是否符合條件
(3) 利用補(bǔ)集思想, 計(jì)算連續(xù)的不符合條件區(qū)間, C(2,N) - ∑C(2,N_i);
初始化pos = 1; 對(duì)于當(dāng)前指針k, 若part[k] == 1, 則ans -= C(2, k-pos+1), pos = k+1; //pos記錄當(dāng)前第一個(gè)不符合條件區(qū)間的標(biāo)號(hào)
*邊界比較麻煩, 實(shí)現(xiàn)之前應(yīng)該計(jì)算好
*盡可能分開(kāi)不同步驟, 降低思維難度

12.12

NOIp 2011P, 表達(dá)式的值[表達(dá)式樹(shù)], 1.5h, 80
*實(shí)際上50min就寫(xiě)完了, 查錯(cuò)查了很久
(1) 建樹(shù)(左閉右開(kāi)區(qū)間)
 1) 找到括號(hào)外第一個(gè)+或*(即結(jié)合性反方向在括號(hào)外第一個(gè)運(yùn)算符, 利用p記錄是否在括號(hào)中)
 2) 若不存在+, 令posO=posA
 3) 遞歸build_tree(L, posO), build_tree(posO+1, R)
    若不存在*, 則遞歸build_tree(L+1, R-1)
 *[優(yōu)化] 每次過(guò)程執(zhí)行前, 脫去所有括號(hào), 需要記錄括號(hào)位置; 如果直接判斷端點(diǎn), 可能會(huì)出現(xiàn)(*)+(*)的情況, 導(dǎo)致WA
(2) treedp(其實(shí)就是簡(jiǎn)單統(tǒng)計(jì))
 1) op[i] == '*'
  f[i][0] = (f[i.l][0] + f[i.l][1])*(f[i.r][0] + f[i.r][1]) - f[i.l,1]*f[i.r,1]
  f[i][1] = f[i.l][1] * f[i.r][1]
 2) op[i] == '+'
  f[i][0] = f[i.l][0] * f[i.r][0]
  f[i][1] = (f[i.l][0] + f[i.l][1])*(f[i.r][0] + f[i.r][1]) - f[i.l,0]*f[i.r,0]
 *如果左子樹(shù)或右子樹(shù)不存在, 則f[i.k][0] = f[i.k][0] = 1(特判, 直接賦值引起錯(cuò)誤)
*樸素的表達(dá)式樹(shù)是O(N^2)的, 常數(shù)較小, 可以利用兩個(gè)奇怪的棧做到O(N). by gXX

12.19

NOIp 2011T, 觀光公交, 研究題解.[*待實(shí)現(xiàn)]
*真是每周一題我擦...
(1) 初步的分析包括不使用加速器時(shí)的時(shí)間計(jì)算, 以及對(duì)加速器對(duì)時(shí)間影響的簡(jiǎn)要分析. => 一個(gè)比較關(guān)鍵的結(jié)論是, 加速器對(duì)時(shí)間的影響一定是一個(gè)連續(xù)段
(2) clj題解給出了一種非常高效的O(M+NlgN)做法, 實(shí)質(zhì)上利用堆處理了取最大值的問(wèn)題.
(3) O(kN)的做法比較好理解, 實(shí)質(zhì)是利用g(i)數(shù)組表示d[i]-1可以影響[i, g(i)]的時(shí)間值, 對(duì)于每個(gè)加速器找最大值即可. 看起來(lái)時(shí)間可能比較尷尬, 不過(guò)實(shí)測(cè)效果很好.

12.26

NOIp 2011T, 觀光公交[貪心+遞推], AC
[1] 10% 做法, O(N)
每個(gè)景點(diǎn)的最晚出發(fā)時(shí)間
time[i] = max{T_j} (A_j = i)
每個(gè)景點(diǎn)的到達(dá)時(shí)間
enter[i] = max{time(i-1), enter(i-1)} + D[i-1]
景點(diǎn)1..i的游客數(shù)為sum[i]
ans = Σ(enter[B[i]] - T_i) (1 <= i <= M)

[2] 20% 做法, O(N^2)
僅考慮一個(gè)加速器, 嘗試將其用于任意兩個(gè)連續(xù)景點(diǎn)間, 記錄最小值.

[3] 60%做法, O(kN^2)
可用反證法證明, 當(dāng)前加速器在最優(yōu)位置時(shí), 前一個(gè)加速器必然在最優(yōu)位置. 符合貪心選擇性質(zhì).
因而, 對(duì)于每個(gè)加速器, 重復(fù)20%做法即可, 非常易于編寫(xiě).

[4] AC做法, O(kN)
分析易知, 若對(duì)景點(diǎn)i到景點(diǎn)i+1應(yīng)用一個(gè)加速器, 景點(diǎn)i之前的距離不受影響, 景點(diǎn)i之后僅當(dāng)enter[i]-1 >= time[i]有影響, 因而受影響的若干個(gè)景點(diǎn)必為一連續(xù)線段.
g[i]表示在景點(diǎn)i到景點(diǎn)i+1應(yīng)用一個(gè)加速器, 連續(xù)段[i, g(i)]受到影響, 可得
[方程]g[i] = g[i+1] (enter[i] > time[i])
    i+1 (enter[i] <= time[i])
[邊界]g[N-1] = g[N]
(1) 初始化數(shù)組
(2) 對(duì)于D[i] > 0的段, 計(jì)算max{sum[g[i]] - sum[i]}, 應(yīng)用加速器
(3) 對(duì)于[i, min(g(i), N-2)]更新enter[]和g[]
(4) (2)(3)重復(fù)k次
*60分做法的只有50行, AC做法也不過(guò)70行. 60分做法只要對(duì)題意理解清楚不難實(shí)現(xiàn), 10+min可以寫(xiě)完. AC做法發(fā)現(xiàn)了連續(xù)性質(zhì), 利用遞推將尋找最優(yōu)位置的耗時(shí)從O(N^2)變?yōu)镺(N^2), 有一定思維難度, 但是和Day2P2的難度相差無(wú)幾.

[5] AC做法, O(M + NlogN)
基本同上, 無(wú)需使用g[]數(shù)組, 對(duì)于每個(gè)路徑一次應(yīng)用多個(gè)加速器, 利用堆求得最大值.
未實(shí)現(xiàn), 參考clj題解.

posted @ 2012-01-03 13:59 Climber.pI 閱讀(167) | 評(píng)論 (0)編輯 收藏

Happy Ending

好在一等了.
390 = 100 + 60 + 20 + 100 + 100 + 10, 省排62, 市排2.
Day1 180, 省排152; Day2 210, 省排24.
主要是我AC了Day2P2, 那題全省的AC率只有10%左右.
和那天的密碼一樣, 真是Happy Ending.
-----------------------------------
但是, 身邊的人的悲傷, 太多了

posted @ 2011-11-23 20:52 Climber.pI 閱讀(183) | 評(píng)論 (0)編輯 收藏

NOIp 2011 隨記

去年在紀(jì)中, 我看到成績(jī)單直接傻了.
當(dāng)年會(huì)寫(xiě)270, 結(jié)果DP寫(xiě)掛了, 數(shù)組開(kāi)小, 應(yīng)該30, 結(jié)果爆零;
第四題, 30min, floodfill沒(méi)調(diào)出來(lái)
于是直接130, 所幸還有個(gè)三等
-------------------------------------
今年比去年淡定多了
Day0果斷去逛紀(jì)中

Day1還是很緊張, 題目很簡(jiǎn)單, 30min想出算法, 題意抄了滿滿一頁(yè)
被叉姐模擬賽的WA嚇怕了, 第一題就開(kāi)始對(duì)拍, 寫(xiě)完兩個(gè)程序外加gen, 已經(jīng)過(guò)了1h了
第二題寫(xiě)了四個(gè)版本的程序O(N^2) -> O(N^3) -> O(N^2) -> O(N^2)
一開(kāi)始還看錯(cuò)題了, 還好查出來(lái)了.
擔(dān)心時(shí)間不夠, 沒(méi)敢想O(N)的AC算法, 卻用了10min敲了ST, 所幸敲對(duì)了
第三題果斷寫(xiě)30分, 結(jié)果最后還是沒(méi)調(diào)出來(lái)

Day2開(kāi)始淡定了, 題目5min看完, 第一題瞬間想到AC算法, 二三題無(wú)思路
于是半個(gè)小時(shí), 敲完了第一題, 看著旁邊的人手足無(wú)措, 有些洋洋自得
接下來(lái)敲第二題的暴力敲了30min, 出去了一趟, 瞬間想到了二分+前綴和優(yōu)化, 又是30+min, 敲了AC算法
糾結(jié)了一下二分, 然后開(kāi)始看第三題
突然發(fā)現(xiàn)對(duì)拍器聽(tīng)了, 修正了一個(gè)邊界問(wèn)題, 和昨天相仿, 只剩下40+min了
很快的YY了一個(gè)40分的DP, 卻對(duì)正確性和邊界毫無(wú)把握
于是寫(xiě)了一個(gè)10分的, 然后想20分的時(shí)候, 突然找到bug, 修正了
交卷的時(shí)候, 瞬間想到20分寫(xiě)法, 但是沒(méi)時(shí)間了

Day2的發(fā)揮還好, 看起來(lái)210. Day1看起來(lái)只有170, 不知道還會(huì)不會(huì)再出問(wèn)題.
Ylen神牛貌似寫(xiě)了230 + 210, wx神牛可能500+, xh裸考看起來(lái)都和我成績(jī)差不多....
看了WJMZBMR神牛的題解, 三題做法一樣, 有些心安. 看了貼吧, 發(fā)現(xiàn)某題某種邊界情況沒(méi)有測(cè)試, 細(xì)想了一下好像沒(méi)問(wèn)題.
本來(lái)挺淡定的, 頹了一個(gè)下午又心慌了. 還有不少作業(yè), 還是不能頹啊.

posted @ 2011-11-14 19:33 Climber.pI 閱讀(379) | 評(píng)論 (0)編輯 收藏

Problem List(10.29 ~ 11.12)

10.29

WZOI第一次模擬賽, 2h -> 0
卡第一題, 現(xiàn)在頭暈中. 思路錯(cuò)誤, 很快的得到了題意, 對(duì)斐波那契數(shù)列取模. 然后用特征方程搞出了遞推式, 然后發(fā)現(xiàn)n>=20后的情況, 嘗試對(duì)無(wú)理數(shù)取模, 然后各種頭暈.
*這是NOIp, 不是CMOp, 怎么會(huì)考這么蛋疼的東西. 找時(shí)間重寫(xiě)吧, 限時(shí)2.5h. -> 應(yīng)該往周期數(shù)列的方向上想
*感覺(jué)現(xiàn)在需要系統(tǒng)復(fù)習(xí), 又是瓶頸狀態(tài)

10.30

調(diào)教Ubuntu in VMware, TeX中文無(wú)能

姜碧野論文<SPFA算法的優(yōu)化及其應(yīng)用>, 學(xué)習(xí)差分約束系統(tǒng)
*還有兩種優(yōu)化SLF和LLL, 真心覺(jué)得不如打dij+heap

butter, 復(fù)習(xí)SPFA.
*關(guān)于數(shù)據(jù)結(jié)構(gòu)的整理
(1)鄰接表 first/next/u/v/w/Cnt -> addEdge()
(2)SPFA d/q/inq
(3)初始化 first/d
*沒(méi)有考慮雙向邊, 不可達(dá)的情況. 在敲代碼之前應(yīng)盡可能完善算法.

poj3259[DEC06, Gold, SPFA找負(fù)環(huán)]
(1) BFS做法
數(shù)組count[]記錄每個(gè)點(diǎn)的入隊(duì)次數(shù), 由定義易知, 若count[i]>=N, 則圖必然存在負(fù)環(huán).(<算法之道>上有個(gè)很好的例子)
*標(biāo)程直接按照Bellman-Ford的定義做, 復(fù)雜度O(NM). 網(wǎng)上的一次BFS的做法是錯(cuò)的, 比如兩個(gè)強(qiáng)連通分量的情況:
1
6 4 2
1 2 2
1 3 2
2 3 2
4 5 2
5 6 10
6 4 10
*因而N次SPFA的效率O(kNM)可能不如裸的Bellman-Ford O(NM); 更好的做法是Tarjan+SPFA, 即只對(duì)每個(gè)強(qiáng)連通分量進(jìn)行SPFA, O(N + kM) 
*優(yōu)化: 
1) d[]可以初始化為0, 速度比(3)要快
2) 入隊(duì)次數(shù)不超過(guò)2(M+N), 可能錯(cuò)誤
(2) DFS做法, WC09姜碧野論文涉及, 實(shí)現(xiàn)無(wú)能.(網(wǎng)上的做法又是錯(cuò)的)
(3) Bellman-ford, O(VE)
三重循環(huán), 對(duì)每條邊更新V次, 效果好于(1)
*SPFA找負(fù)環(huán), 利用vis標(biāo)記每個(gè)點(diǎn)是否被訪問(wèn)過(guò), 僅對(duì)當(dāng)前未訪問(wèn)的點(diǎn)進(jìn)行SPFA, 這樣的話效率應(yīng)該高于O(VE) //期望情況下

10.31

poj1201[差分約束系統(tǒng)], 25min, 1Y //參見(jiàn)WC06馮威論文
關(guān)鍵在于建模, 令d(i)表示0..i的整數(shù)個(gè)數(shù), 可得
d(b) - d(a-1) >= c_i
d(i) - d(i-1) >= 0
d(i-1) - d(i) >= -1
w(a-1, b) = c_i
w(i-1, i) = 0
w(i, i-1) = -1
按照定義, 求整數(shù)個(gè)數(shù)最小值, 即求SPFA最長(zhǎng)路.
*注意更新最小標(biāo)號(hào)idS, 最大標(biāo)號(hào)idE, 第二類邊要對(duì)1..idE的情況賦值
*關(guān)鍵在于找出差分方程組
http://blog.csdn.net/kk303/article/details/6864199
*一般的解題步驟: (1)建模 (2)設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu) (3)寫(xiě)出大致流程

po3169[差分約束系統(tǒng)], 35AC, 3WA
(1) 建模
題目中給出兩種邊(a, b) , d
對(duì)于第一種, (a, b) >= d
對(duì)于第二種, (a, b) <= d, 即(b, a) >= d
*SPFA求最短路, 還是最長(zhǎng)路, 由不等號(hào)方向決定
(2) 討論各種解的情況
1) 正常
2) -1, 存在負(fù)環(huán)
3) -2, 無(wú)法連通
*對(duì)于負(fù)環(huán), 小范圍Bellman-Ford(多進(jìn)行一輪松弛操作), 大范圍一次SPFA(count[i]>=N)
*各種字母打錯(cuò), 變量打錯(cuò) -> 對(duì)于點(diǎn), MAXn; 對(duì)于邊, MAXEdge;

東方幻想鄉(xiāng)Stage2, P4, suika[分層圖最短路+SPFA], 1h
(1) 建圖
1) 點(diǎn)從奇時(shí)刻到偶時(shí)刻(U,U'), 從偶時(shí)刻到奇時(shí)刻(U',U)
*需要注意黑洞停留消耗體力s[U], 白洞不消耗
2) 邊, 兩種情況
A. 端點(diǎn)顏色&重量相異(正負(fù)號(hào)取決于題意)
奇時(shí)刻到偶時(shí)刻 (U, V') = w(U, V) ± delta
偶時(shí)刻到奇時(shí)刻 (U', V) = w(U, V) ± delta
B. 端點(diǎn)顏色相同/重量相同
奇時(shí)刻到偶時(shí)刻 (U, V') = w(U, V)
偶時(shí)刻到奇時(shí)刻 (U', V) = w(U, V)
(2) SPFA最短路
*注意讀題(題意/算法流程/數(shù)據(jù)結(jié)構(gòu))
*Nettle標(biāo)程的做法, 規(guī)定2*U為偶時(shí)刻點(diǎn), 2*U-1為奇時(shí)刻點(diǎn), SPFA起點(diǎn)由起點(diǎn)狀態(tài)決定. 可以避免建圖時(shí)的討論.
*算法三依舊理解不能.

NOIp09, trade
(1) 傳遞閉包+枚舉, 40
1) O(kN^3), 利用鄰接矩陣更新連通性
2) O(N^2), 對(duì)每個(gè)點(diǎn)找最大旅費(fèi), max{w[i] - min{w[j]}} ((j,i) (1,j) (i,N)連通)即為答案
(2) 兩次SPFA維護(hù)連通性+枚舉, AC
1) 從起點(diǎn)1開(kāi)始SPFA, d[i]表示(1,i)是否連通; 
A. 對(duì)于正環(huán)的處理
按照定義, count[i]>=N則不再入隊(duì).(這樣70, 利用r<=2*N不再入隊(duì)可以AC)
B. 記錄遇到的最小價(jià)值Min{A[j]}
2) 從終點(diǎn)N開(kāi)始SPFA, 將之前的邊反向(添邊時(shí)使用last和prev數(shù)組, 替代first和next數(shù)組), 維護(hù)連通性
3) 枚舉min{A[i] - min{A[j}}, (j,i)連通, 1<=i<=N的最大值即為答案.
*題解給出了兩種做法
(1) 求強(qiáng)連通分量縮點(diǎn), 轉(zhuǎn)化為DAG, 然后求解
(2) d[i] = min{d[i], d[j], a[j]}作為松弛操作, SPFA

SPFA專題結(jié)束, 明天開(kāi)始Tarjan和dij+heap

11.1

agrinet[Kruskal], 20min, 復(fù)習(xí)Kruskal

11.2

Tyvj, Sept09, P2[Kruskal + 并查集]
需要理解Kruskal的過(guò)程, 做法如下:
(1) 間接排序(邊集數(shù)組)
(2) 按照Kruskal, 從w[i]最小的邊開(kāi)始統(tǒng)計(jì),并查集維護(hù)聯(lián)通性
p[x] = y;//并集
num[y] += num[x];//統(tǒng)計(jì)每個(gè)集合的點(diǎn)的個(gè)數(shù)
maxe[y] = max{maxe[y], maxe[x], w[i]};//維護(hù)每個(gè)集合的最大邊
ans += (C(2,num[x]+num[y]) - C(2,num[x]) - C(2,num[y]) - 1) * (maxe[y] + 1);//統(tǒng)計(jì)沒(méi)有聯(lián)通的邊
*沒(méi)有間接排序WA了一次,可以通過(guò)小數(shù)據(jù)檢驗(yàn)(比如深度不同的樹(shù)、鏈)
*各種卡long long, 可以計(jì)算最大值為10^6C(2,10^6)
-> long long的類型轉(zhuǎn)換, long long類型的計(jì)算中, 數(shù)字必須標(biāo)識(shí)ll, 否則會(huì)導(dǎo)致計(jì)算錯(cuò)誤.(也就是說(shuō)可能爆int范圍的地方都要用long long)
-> [by gXX] 可以這么分析, (long long) = (int) * (int) / (int); 于是中間的寄存器會(huì)掛掉
*深度大于1的樹(shù)的生成 by Ylen
和深度為1的樹(shù)的做法相同, 然后記錄葉節(jié)點(diǎn), 對(duì)葉節(jié)點(diǎn)隨機(jī)伸長(zhǎng)

NOIp10, P3[并查集]
*需要明確并查集能干什么, 并查集可以合并, 但是不能隔開(kāi) -> 把分隔操作轉(zhuǎn)化為合并操作
(1) 間接排序(邊集數(shù)組)
(2) 利用sep[i]記錄i的敵人, 對(duì)于(u,v)
i) sep[u]存在, 那么merge(v, sep[u]) //u的敵人們是朋友
ii) sep[u]不存在, 那么sep[u] = v//v是u的敵人
v同理, 遇到find(u) == find(v)的情況, 直接輸出答案即可
*需要注意特判沖突的情況, 不妨用flag標(biāo)記, 若沒(méi)有輸出答案, 則輸出0

王曉東練習(xí)題, 序關(guān)系計(jì)數(shù)[DP]
f(i, j) = (j+1) * (f(i-1, j-1) + f(i-1, j))
f(i-1, j)很好解釋, f(i-1, j-1)解釋無(wú)能
[狀態(tài)]f[i][j]表示i個(gè)數(shù)加j個(gè)小于號(hào)
*Covi給出一個(gè)結(jié)論, 禁止小于號(hào)加在一堆等號(hào)內(nèi)部, 證明無(wú)能 -> 在zjy的提示下解決了
*注意到序列中已添加的數(shù)的值是不變的
i)f[i-1][j]的話, 已有的數(shù)被分成j+1組, 顯然每組只能添加1個(gè)等號(hào)
ii)f[i-1][j-1]的話, 已有的數(shù)被分成j組, 因?yàn)橐砑?lt;號(hào), 所以只有(j-1)+2=j+1個(gè)位置可以(即每組的邊界)

Contest OPEN11 Silver, llang[并查集]
(1) 讀入分別以 奶牛 和 語(yǔ)言 為關(guān)鍵字, 用鄰接矩陣存儲(chǔ)(這里必須用到vector)
(2) 合并說(shuō)相同語(yǔ)言的牛, 得到m個(gè)集合, m-1即為最少數(shù)量
(3) 遍歷N個(gè)點(diǎn), 若該節(jié)點(diǎn)所在集合未被遍歷, 則標(biāo)記遍歷并輸出
*vector的用法: 非常適合稀疏圖的鄰接表的數(shù)組實(shí)現(xiàn)
(0) 聲明變量: vector<int> A;
(1) 加入元素: A[i].push_back(elect);
(2) 獲取某列元素個(gè)數(shù): A[i].size();
(3) 獲取某個(gè)具體元素: A[i][j] //0 <= j < A[i].size(), 注意范圍

還有一道kruskal和兩道tarjan以及dij+heap

11.3

NOIp07真題, 3h, 300
P1: 模擬, AC
P2: 字符串, AC
利用flag表示是否輸出(僅標(biāo)記), 然后Expand函數(shù)三重循環(huán)即可.
*考慮這種情況1-2-7, 以及A-B

P3: DP, 90(本地壓四位后90)
[狀態(tài)] f[k][i]表示當(dāng)前行長(zhǎng)度為k, 行首編號(hào)為i
[方程] f[k][i] = max{f[k-1][i+1] + A[i] * 2^(L-k+1), f[k-1][i] + A[i+k-1] * 2^(L-k+1)}
[初始化] f[1][1..N] = 2^L * A[i]
*變量打混, 務(wù)必靜態(tài)查錯(cuò)
*高精度寫(xiě)掛
(1) 進(jìn)位
(2) 輸出0(去掉前導(dǎo)0的時(shí)候, 保證len>0)
*print可以特判l(wèi)en<0輸出0
(3) 雙目運(yùn)算符必須const, 這是一個(gè)很好的習(xí)慣, 避免值發(fā)生不必要的改變; 
*返回的bign盡量新建.
*最大測(cè)試點(diǎn), 本地0.9s, RQ0.4s, Tyvj0.0s

P4: Floyd+亂搞, 50minAC(計(jì)時(shí)賽無(wú)分?jǐn)?shù))
(1) Floyd求任意點(diǎn)最短路, 記錄最大值(即直徑)
(2) 對(duì)d(i, j)=直徑的邊, 求路徑
(3) 對(duì)于每個(gè)直徑, 求出它的所有路徑, 然后對(duì)每個(gè)路徑求其他點(diǎn)到此路徑的最大值(dist操作, 某點(diǎn)到此路徑的最小值)
*點(diǎn)的情況需要特判
*注意區(qū)分最大/最小值, 這題考的就是對(duì)于抽象模型的理解能力
*有線性時(shí)間做法

東方幻想鄉(xiāng)Stage2, P3, 60棧崩潰

11.4 & 11.5

叉姐模擬賽, 140/300
P1: 字符串處理, 卡通配符含義, 30
(1) 讀入, 可以利用數(shù)組+標(biāo)記字符 或者 vector
    for (int i = 0; i < n; ++ i) {
        begin[i] = sumLen;
        scanf("%s", str + begin[i]); //給出字符串首指針
        len[i] = strlen(str + begin[i]);
        sumLen += len[i];
    }
*str記錄字符串, begin記錄起始位置, len記錄長(zhǎng)度
*vector必須手工轉(zhuǎn)換, 不能直接利用scanf讀入
(2) 標(biāo)記*位置(初始化為strlen(p), 注意沒(méi)有*的情況)
(3) 從起始位置掃描一次, 區(qū)間[0, pos)
從終止位置掃描一次, 區(qū)間(pos, len-1]

P2: 最大帶權(quán)生成樹(shù), Kruskal變種. 寫(xiě)了一個(gè)生成子集, 40
[AC做法]
(1) 判斷無(wú)解[鄰接表 + BFS]
*注意變量名
(2) 邊i的權(quán)值為w[A[i]] + w[B[i]], 根據(jù)度的定義容易得到.
之后套用Kruskal, 降序排序即可.
[40%做法]
(0) 判斷無(wú)解
(1) 位運(yùn)算生成子集(N <= 20) -> 亦可DFS生成C(N-1, M)集合
(2) BFS驗(yàn)證連通性
(3) 計(jì)算權(quán)值
*一開(kāi)始看錯(cuò)范圍, 認(rèn)為必須用O(N)算法, 然后不考慮排序. 權(quán)值最大 -> 度最大, 貪心無(wú)能.

P3: 動(dòng)態(tài)規(guī)劃, AC
利用恒等式\sum{x_i * x_j} = 1/2(\sum{x_i}^2 - \sum{x_i ^ 2})
可以通過(guò)觀察, 或者數(shù)學(xué)證明最值只在極值點(diǎn)取到.(60%算法, 直接枚舉)
因而要求\sum{x_i * x_j}最小值, 即求\sum{x_i}^2的最小值
\sum{x_i}的最小值, 可以對(duì)所有數(shù)進(jìn)行容量為\sum{A_i}/2的0/1背包, \sum{A_i}/2 - 2 * f[\sum{A_i}/2]即為答案.
*gXX給出了利用一次函數(shù)的證明方法, (待補(bǔ))
*對(duì)于此類數(shù)據(jù)類型誤導(dǎo)題目, 可以通過(guò)數(shù)學(xué)推導(dǎo), 或者編程實(shí)驗(yàn)證明.
[標(biāo)程做法] by ftiasch
(1) 討論極值位置
固定x_1, x_2, ..., x_{n - 1} .  
f(x_n) = (x_1 + x_2 + ... + x_{n - 1}) * x_n + () ...  
這是個(gè)關(guān)于x_n的一次函數(shù), 所以只有在端點(diǎn)處才會(huì)有極值.
x_1 * x_2 + (x_1 + x_2) * x_3 + (x_1 + x_2 + x_3) * x_4 + ...  
(2) DP
dp[i][j]表示前i個(gè)數(shù), 在x_1 + x_2 + ... + x_i = j的情況下的答案, 轉(zhuǎn)移就是枚舉現(xiàn)在是弄個(gè)+a_i還是-a_i。  


NOIp06真題, 3h, 120 >_<
P1: 環(huán)狀區(qū)間DP, 10
(1) 方程
f[i][j]表示合并第i顆珠子的頭標(biāo)記到第j顆珠子的尾標(biāo)記的最大值
f[i][j] = max(f[i][k] + f[k][j] + A[i]*A[k]*A[j]) (i <= k <= j)
(2) 實(shí)現(xiàn)
改寫(xiě)方程
f[l][i]表示從i開(kāi)始, 合并l顆珠子(指頭標(biāo)記)的最大值
f[l][i] = max(f[k][i] + f[l-k][i+k] + A[i]*A[i+k]*A[i+l]) (1 < k < l)
*注意下標(biāo); i的枚舉范圍是[1, 2n-1], 環(huán)狀; -> 當(dāng)成鏈做只有50
*和一般的區(qū)間模型最大的不同, 在于頭尾標(biāo)記, 事實(shí)上比較可行的方法是在草稿上按照要求畫(huà)出珠子, 以檢驗(yàn)下標(biāo);

P2: 簡(jiǎn)化版孩子背包 -> 分組背包, AC
*Nettle的某道模擬題和此題的命題思路如出一轍, 都有兩種做法, 一種是直接套用更復(fù)雜的模型, 另一種是改變現(xiàn)有模型. 要充分挖掘問(wèn)題性質(zhì).

P3: 模擬, 10
(1) 找空擋
從time[opt[k]][count[opt[k]]]開(kāi)始
驗(yàn)證區(qū)間長(zhǎng)度
++Time //這里類似字符串匹配
(2) 在空擋標(biāo)記時(shí)間
(3) 更新完成時(shí)間, finish[opt[k]][count[opt[k]]] = Time + time[opt[k]][count[opt[k]]] - 1;
(4) 更新最后完成時(shí)間
*一定要在草稿紙上寫(xiě)出流程和關(guān)鍵語(yǔ)句

P4: 遞推, 沒(méi)時(shí)間, 6h
題目中第二次描述給了很關(guān)鍵的暗示(看了BYVoid的題解豁然開(kāi)朗, 捶胸頓足中):
[狀態(tài)] f[i][j]表示i為2^k進(jìn)制數(shù)最高位為j
[方程] f[i][j] = \sum{f[i-1][m]} (j+1 <= m < 2^k)
ans = \sum{f(m, 0)} (3 <= m <= w/k + 1) + \sum{f(w/k + 1, i)} (1 <= i < 2^(w%k)-1)
*可以直接利用記憶化, calc[][]標(biāo)記是否計(jì)算, int70, 高精90
*由于題目的范圍很大, 考慮滾動(dòng)數(shù)組(注意每次計(jì)算初始化), 遞推計(jì)算f[][], 累加同時(shí)進(jìn)位, 高精度壓位, 大概第10個(gè)點(diǎn)1.35s. 去掉了運(yùn)算符重載, 第10個(gè)點(diǎn)0.9s.
*這題屬于典型卡常數(shù), 賽場(chǎng)上, 能觀察出方程并調(diào)出70分即可, 時(shí)間充裕可以考慮調(diào)試90分.
*注意運(yùn)算符優(yōu)先級(jí)(10)
*高精度調(diào)試技巧
(1) 初始化(初始化位置)
(2) 進(jìn)位(模擬手算)
(3) const(防止修改不應(yīng)修改的值)

rqnoj 341[SPFA], 40min
(1) 無(wú)向圖看成有向圖
(2) 漏打循環(huán)隊(duì)列
(3) first[]初始化錯(cuò)位
*草稿紙很重要!!!

11.6

叉姐模擬賽, 210/300
P1: 2個(gè)trick, long long, 還有范圍
P2: 0/1背包變形
預(yù)處理, 以c[i] - v[i]為關(guān)鍵字升序排序
P3: 二分圖判定
*無(wú)向圖, 考慮兩條邊
*描述歧義, 特判沒(méi)寫(xiě), 不說(shuō)了, 浪費(fèi)了2h

NOI 2001 食物鏈[并查集], WA
和之前的做法完全不同, 題目是環(huán)狀依賴.
*尼瑪今天寫(xiě)check.bat都不check..
[題解]http://winterlegend.blog.hexun.com/25409221_d.html

NOIp04 合并果子[小根堆, STL實(shí)現(xiàn)]
學(xué)習(xí)STL中的優(yōu)先隊(duì)列:
[聲明] priority_queue<int, vector<int>, greater<int> > q;
*小根堆, greater; 大根堆, less;
[彈出隊(duì)首] q.top(); q.pop();
[加入元素] q.push(k);

ftiasch, 2010114模擬賽
P1: NOIp10第三題, 判定二分圖
P2: 找個(gè)兔子, 在不超過(guò)L的范圍斷開(kāi), 直接驗(yàn)證
P3: 把每個(gè)時(shí)刻的蘿卜加入堆(當(dāng)前時(shí)刻沒(méi)有, 則添加下一時(shí)刻), 維護(hù)當(dāng)前時(shí)刻最大值, 累加即可.
P4: 最小生成樹(shù) + 背包
對(duì)于一條路(i, j), 需要消耗D(i, j)個(gè)同類型的蘿卜, 因而需要一次0/1背包.

NOIp04 合并果子[小根堆, 手寫(xiě)heap]
堆只維護(hù)隊(duì)首元素最小值, 不對(duì)隊(duì)中其他元素負(fù)責(zé).
up() 直接上翻
down() 盡量取2*k+1(目的就是找到最小值), 然后下翻

11.7

Contest MAR11 packdel[dij+heap], 1h
(1) dij+heap元素出隊(duì)時(shí), 標(biāo)記已計(jì)算(done[k])
(2) 手寫(xiě)可以用cmp函數(shù)比較, 注意A[k]與k的區(qū)別

叉姐模擬賽,
*手工修正了50%的數(shù)據(jù)..什么狀況

NOIp10, 引水入城[BFS+貪心+分析]
*認(rèn)真讀題, 題目?jī)H考慮最下面一行是否有水, 卡了40min
(1)無(wú)解, 30
對(duì)第一行進(jìn)行floodfill即可, 可以BFS實(shí)現(xiàn)
(2)有解, M <= 10, 50, 25min
二進(jìn)制生成子集, 然后利用floodfill填充, 并判定是否滿足題意, 維護(hù)最小值即可
(3)有解, AC, 2.5h
[重要結(jié)論]有解當(dāng)且僅當(dāng), 第一行某個(gè)城市流經(jīng)最后一行城市的結(jié)果連續(xù).(若不連續(xù), 必然不滿足題意)
因而可以將題目轉(zhuǎn)化為最少線段覆蓋問(wèn)題.
利用鄰接表維護(hù)當(dāng)前點(diǎn)的線段(注意退化為點(diǎn)的情況), 貪心過(guò)程如下:
1) 從L = 1開(kāi)始, 對(duì)于(L, R), 維護(hù)最大的R_Max
2) 更新L = R, R = R_Max+1(左閉右開(kāi)區(qū)間)
3) 重復(fù)以上步驟, 直到R > M
*貪心問(wèn)題, 以及和區(qū)間有關(guān)的問(wèn)題不熟悉, 待閱<淺談信息學(xué)中的區(qū)間問(wèn)題>
*要在紙上寫(xiě)出關(guān)鍵條件和大致算法流程以及語(yǔ)句, 不要把時(shí)間浪費(fèi)在調(diào)試上

待閱<淺談信息學(xué)中的區(qū)間問(wèn)題>
*閱畢, 涉及到了白書(shū)上三類區(qū)間問(wèn)題

11.8

Tyvj1038[RMQ -> ST], 1.5h
ST算法(RMQ問(wèn)題, 離線算法, O(NlogN)建表, O(1)查詢)
[狀態(tài)] f[i][j]表示從[i, i + 2^j - 1]的最值
[方程] f[i][j] = max{f[i][j-1], f[i + 2^(j-1)][j-1]} (以j為階段; 1+(1<<j)<=N, 保證實(shí)際意義合法)
[查詢] 對(duì)于區(qū)間[i, j], 令k = [log2(j-i+1)], 答案即為max{f[i][k], f[j - (1<<k) + 1][k]}
*不要相信樣例的調(diào)試性, 寫(xiě)make, 或者打小數(shù)據(jù)手算

Tyvj1297[ST], 40min
*log_2打錯(cuò), 不妨自己寫(xiě)函數(shù)

Tyvj國(guó)慶新賽制模擬賽, Day2P2, game[單調(diào)棧+ST], 1.5h
(1) 單調(diào)棧, 維護(hù)L[i], 表示A[L[i]..i-1] <= A[i]
while(A[L[i] - 1] < A[i])
L[i] = L[L[i] - 1];
(2)ST
*檢查方程和查詢的寫(xiě)法, 靜態(tài)調(diào)試, 別盲目做
*認(rèn)真讀題

NOIp08, message[雙進(jìn)程DP],50min
[狀態(tài)]f[k][i][j]表示從(1,1), 兩人分別走到(i, k-i), (j, k-j)的最大值
[方程]f[k][i][j] = max{f[k-1][i][j], f[k-1][i-1][j], f[k-1][i][j-1], f[k-1][i-1][j-1]} + A[i][k-i] + A[j][k-j] (i != j)
[答案]max{f[M+N][M-1][M], f[M+N][M][M-1]}
*注意狀態(tài)的實(shí)際意義
*注意不要隨便用簡(jiǎn)化寫(xiě)法, 事實(shí)上簡(jiǎn)化寫(xiě)法是最可能出問(wèn)題的地方

Tyvj國(guó)慶新賽制模擬賽, Day1P3, maze1[雙進(jìn)程DP], 1h
*注意讀題, 每個(gè)格子可能有不只一個(gè)面包圈
方程和上一題一樣, 說(shuō)一下如何記錄方案:
利用數(shù)組t1[k][i][j], t2[k][i][j]分別表示兩個(gè)人走的途中可以吃到的最多的面包圈, 答案在其中取最大值即可. 標(biāo)程把對(duì)每個(gè)格子面包圈的個(gè)數(shù)的計(jì)算加入了方程中, 從而避免了討論.
*這兩天做陳題發(fā)現(xiàn)問(wèn)題, 由于對(duì)于題目殘存的印象導(dǎo)致的讀題問(wèn)題非常多.

Tyvj國(guó)慶新賽制模擬賽, Day2P1, ship[計(jì)算幾何], 15min
典型的卡讀題的題目, 穩(wěn)定的定義是, 正多邊形的幾何重心落在最高的柱子們構(gòu)成的多邊形中(不能在邊界).
直接檢查下標(biāo)即可, 連續(xù)兩最高柱子的下標(biāo)只差小于(N+1)/2

Tyvj國(guó)慶新賽制模擬賽,Day2P3, maze2[二分+BFS]
*學(xué)習(xí)了白書(shū)上的二分查找上下界的方法, 并注意到是左閉右開(kāi)區(qū)間.
-> 按照當(dāng)時(shí)帖子的說(shuō)法, 標(biāo)程錯(cuò)誤, 修正一處后仍然WA.

11.9

叉姐模擬賽Stage4, 50 + 40 + 0 >_<
P1: 高精度
裸的高精度. 自己寫(xiě)個(gè)30%算法跑一下可以發(fā)現(xiàn), f[A][B] = A*B-1(好吧那個(gè)奇葩的遞推式怎么YY出來(lái)的)
*三處寫(xiě)掛: (1)數(shù)組范圍 (2)len的計(jì)算(乘法和加法不同, 要命的是還手工屏蔽了小數(shù)據(jù)) (3)進(jìn)位(其實(shí)不需要特判)
*一句話總結(jié)高精度寫(xiě)法
[加法]更新位值, 累加, 進(jìn)位, 退位
[乘法]更新位值(不同), 累乘, 進(jìn)位, 退位
*注意的情況, 進(jìn)位(比如10)
[背景]其實(shí)是有塊a * b的巧克力, 你要把他掰成1 * 1的巧克力, 求要掰多少次

P2: 枚舉
[關(guān)鍵結(jié)論]值最小的聚集點(diǎn)一定在某個(gè)點(diǎn)的x上, 某個(gè)點(diǎn)的y上(可以考慮證明一維的情況, 然后推廣)
*昨晚的討論不充分, 錯(cuò)誤的認(rèn)為值最小的聚集點(diǎn)一定和某個(gè)點(diǎn)重合, 且任意多點(diǎn)在某點(diǎn)聚集等價(jià)(事實(shí)上僅在兩點(diǎn)的時(shí)候成立, 今天發(fā)現(xiàn)30%程序是錯(cuò)的)
然后枚舉每個(gè)x,y, 計(jì)算每個(gè)點(diǎn)和他們的曼哈頓距離, 排序后累加前k個(gè), 維護(hù)最小值.
復(fù)雜度大概是O(N^2 * NlogN)
*改寫(xiě)程序務(wù)必注意循環(huán)變量是否打錯(cuò)

P3: DP
*現(xiàn)場(chǎng)的時(shí)候NC了, 寫(xiě)了一個(gè)DFS, 大概能處理N <= 8的情況
(1) 50%做法
[狀態(tài)]f[i][j][k]表示取到A[i], B[j], C[k]的最小值
[方程]f[i][j][k] = min{f[i-1][j][k] + A[i]*p, f[i][j-1][k] + B[j]*p, f[i][j][k-1] + C[k]*p} (p = i+j+k)
[初始化]f[0][0][0] = 0;
(2) 100%做法
[狀態(tài)]f[i][j]表示取到A[i], B[j]的最小值
[方程]f[i][j] = min{f[i-1][j] + A[i]*p, f[i][j-1] + B[j]*p} (p = i+j)
[初始化]f[0][0] = 0;
[記錄方案]按照f(shuō)[i][j] == f[i-1][j] + A[i]*p倒推, 循環(huán)即可, 注意邊界.
*直接記錄t[i][j] = i的話, 需要注意i==j的情況, 這里應(yīng)該按照方程的實(shí)際轉(zhuǎn)移處理, 而這樣的情況很多, 所以沒(méi)必要使用;
*先對(duì)序列A,B進(jìn)行一次DP, 得到A和B合并后的序列D, 然后對(duì)C,D進(jìn)行DP, 即可得到結(jié)果
*想不出來(lái)的題目可以敲暴力觀察, 或者畫(huà)畫(huà)圖; 暴力程序一定要寫(xiě), 一方面啟發(fā)思路, 另一方面驗(yàn)證正確性.

叉姐模擬賽Stage3, 20 + 60 + 0 >_<
*從哪里跌倒要從哪里爬起來(lái)...
P1: 模擬, 求外表面積(不考慮內(nèi)部表面積)
[1] 對(duì)每個(gè)立方體的邊界染色, 然后從六個(gè)面逼近
*對(duì)于有洞的情況會(huì)掛, gXX表示不會(huì), 原因不知.
[2] 正確做法
(1) 對(duì)每個(gè)立方體的邊界染色, 維護(hù)最大坐標(biāo)
(2) 從(0, 0, 0)開(kāi)始BFS,
i, 已染色的點(diǎn)不標(biāo)記已讀(遇到的Cnt++, 但不入隊(duì))
ii, 未染色的點(diǎn)標(biāo)記已讀
*標(biāo)程范圍開(kāi)小, 已經(jīng)更新數(shù)據(jù)

P2: 枚舉
考慮僅有三個(gè)數(shù)的情況:
操作前a, b, c 差分為(b-a, c-b)
操作后a, a+c-b, c差分為(c-b, b-a)
可以發(fā)現(xiàn)操作的實(shí)質(zhì)就是交換差分.
不妨設(shè)d[i] = A[i+1] - A[i],
那么A[i] = A[1] + \sum{A[j]}(1 <= j < i)
即\sum{A[i]} = N*A[1] + \sum{d[i] * (N-i)}(1 <= i < N)
*注意范圍會(huì)爆int, 要用long long; 注意下標(biāo);

P3: 查找中位數(shù)[數(shù)據(jù)已修正]
(1)60%做法
對(duì)每個(gè)區(qū)間復(fù)制一次, 然后qsort
(2)AC做法 by gXX, 實(shí)現(xiàn)無(wú)能
大意就是想把所有區(qū)間的中位數(shù)搞出來(lái)。其實(shí)可以用堆吧?
就是枚舉一個(gè)左端點(diǎn), 一個(gè)一個(gè)往里面加, 然后用兩個(gè)堆來(lái)維護(hù)中位數(shù)。就是一個(gè)最大堆一個(gè)最小堆, 然后不斷丟來(lái)丟去的過(guò)程。  
呃。大概就是相當(dāng)于要維護(hù)第k大這樣的吧。開(kāi)一個(gè)最小堆, 里面只有k個(gè)元素, 而且是最大的k個(gè), 然后其他的丟到最大堆里面。
然后當(dāng)你k要增大的時(shí)候,就把最大堆的堆頂拿過(guò)來(lái)。要減小的話, 就把最小堆的堆頂丟過(guò)去。
就是這個(gè)意思, 此消彼長(zhǎng), 道法自然。

11.10

NOIp09 靶形數(shù)獨(dú)[DFS+剪枝]
*手工指定搜索順序, 1.5h調(diào)試無(wú)能
*題目中不考慮對(duì)角線, 手工順序無(wú)效!!!
利用frist[][], second[][], grid[][]分別表示每個(gè)行/列/小九宮格的填數(shù)情況, countX[], countY[]統(tǒng)計(jì)一開(kāi)始行列的填充情況.
(1) BFS生成score[][]
(2) 讀入數(shù)獨(dú), 統(tǒng)計(jì)countX[], conutY[], 記錄填充情況
(3) 對(duì)countX[], countY[]進(jìn)行降序間接排序
(4) DFS, 狀態(tài)DFS(x, y, sum)
1) x == N+1, 統(tǒng)計(jì)答案
2) y == N+1, 換行
3) (x, y)已填充, 更新sum
4) 枚舉A[mapX[x]][mapY[y]], 所有涉及值的地方按照map_[]順序
*[動(dòng)機(jī)]不必要的枚舉量, 優(yōu)化搜索順序
*90%的測(cè)試點(diǎn)在1s內(nèi), 1h內(nèi)可以調(diào)試完

NOIp04 蟲(chóng)食算[DFS+剪枝], N h
*注意讀題, 是N進(jìn)制加法, 每個(gè)字母代表的數(shù)字不同
(1) 70分做法
DFS枚舉序列1..N代表的數(shù)字, 利用used[]判斷當(dāng)前數(shù)字是否使用過(guò)
[剪枝]對(duì)于豎式上同一列的三個(gè)數(shù)a,b,c, 顯然滿足c - (a+b) < 2
*注意各種回溯細(xì)節(jié)
(2) 80分做法
對(duì)每一位進(jìn)行枚舉, 判重和可行性剪枝
*回溯只需一解的情況下, 要注意恢復(fù)修改值的時(shí)間
*進(jìn)位要用delta記錄, 可能出現(xiàn)多次進(jìn)位的情況
*else和if的匹配錯(cuò)誤, 注意花括號(hào)!!!!!!!!
*70分做法的剪枝用了沒(méi)效果, 網(wǎng)上還有一個(gè)剪枝, 同一列三數(shù)知二的情況下, 看剩下那個(gè)數(shù)的兩種情況能否使用, 可能可以AC

東方幻想鄉(xiāng)Stage1P4[強(qiáng)連通分量, kosaraju實(shí)現(xiàn)], 40min
(1) 正向?qū)γ總€(gè)點(diǎn)進(jìn)行DFS, 搜索完該點(diǎn)后加蓋時(shí)間戳
(2) 邊反向, 按照時(shí)間戳逆序DFS, 標(biāo)記根節(jié)點(diǎn)
*NOIp09第三題用了類似的邊反向的做法

WZOIStage2 P2[SPFA], 20min
范圍很大, 題解給出的AC做法是DAG的DP,事實(shí)上SPFA可以AC.

11.12

敲Day1P2三種版本, 實(shí)測(cè)ST+鄰接表, N <= 30000; 裸的做法, N <= 15000

posted @ 2011-11-14 19:14 Climber.pI 閱讀(406) | 評(píng)論 (0)編輯 收藏

Problem List (10.1 ~ 10.27)

10.1

tyvj迎國(guó)慶新賽制模擬賽, 140min, 預(yù)計(jì)260

excel[模擬], 50min, 預(yù)計(jì)AC
直接模擬, 需要用康托展開(kāi). 可以打表判斷位數(shù)(利用等比數(shù)列求和).
*注意考慮R C的順序

stock[判斷有向圖連通性], 30min, 預(yù)計(jì)60/100, O(N^2*T)
給出N個(gè)點(diǎn), T條邊, 判斷至多添加多少條邊圖仍是DAG.
對(duì)于每條邊(u,v), 利用DFS染色+鄰接表判斷(v,u)是否可達(dá).

maze1[雙進(jìn)程DP+輸出方案], 60min, 預(yù)計(jì)AC, O(N^3)
[狀態(tài)] f[x1][y1][x2][y2]表示從(1,1)兩人走到(x1,y2)和(x2,y2)可以得到的最多的面包圈.
       t[x1][y1][x2][y2]表示從(1,1)走到(x1, y1)某人可以得到的最多的面包圈(題目要求最小字典序)
  G[x_][y_]表示(x_,y_)是否有面包圈
*注意到(x1,y1)和(x2,y2)地位平等, 故只考慮其中一個(gè)即可.
f[x1][y1][x2][y2] = max{f[x1-1][y1][x2-1][y2], f[x1-1][y2][x2][y2-1], f[x1][y1-1][x2-1][y2], f[x1][y1-1][x2][y2-1]} + G[x1][y1] + G[x2][y2]
t[x1][y1][x2][y2] = max{t[x1-1][y1][x2-1][y2], t[x1-1][y2][x2][y2-1], t[x1][y1-1][x2-1][y2], t[x1][y1-1][x2][y2-1]} + G[x1][y1]

NOIp09 Hankson的趣味題[數(shù)論], 1.5h, O(50000N), AC
注意到最大公約數(shù)最小公倍數(shù)的性質(zhì)就是
a = p1^a1*p2^a2…pn^an
a = p1^b1*p2^b2…pn^bn
gcd(a,b) = p1^min(a1,b1)*p2^min(a2,b2)…pn^min(an,bn)
lcm(a,b) = p1^max(a1,b1)*p2^max(a2,b2)…pn^max(an,bn)
這里去年就想到了, 然后去年實(shí)現(xiàn)無(wú)能. 下面對(duì)每個(gè)因子p進(jìn)行討論
(1)對(duì)于min{p_x, p_a0} = p_a1
  i)若p_a0 = p_a1, 那么p_x ∈ [p_a1, ∞)
 ii)若p_a0 > p_a1, 那么p_x = p_a1
(2)對(duì)于max{p_x, p_b0} = p_b1
  i)若p_b0 = p_b1, 那么p_x ∈ [0, p_b1]
 ii)若p_b0 < p_b1, 那么p_x = p_b1
利用篩法構(gòu)造小于√(2e9)的素?cái)?shù)表, 對(duì)a0, a1, b0, b1分解質(zhì)因數(shù), 然后分別討論四種情況即可(乘法原理).
*需要注意存在大于√(2e9)的素因子的情況, 利用b0[0]和b1[0]記錄即可, 需要注意b1|b0, ans*=2
*利用factor函數(shù)分解質(zhì)因數(shù)時(shí), 傳遞數(shù)組指針, 此時(shí)不能在函數(shù)內(nèi)對(duì)數(shù)組賦初值, 原因不知.
-> size (int *) = 4, 即一個(gè)內(nèi)存地址的大小, sizeof(char*) = 4. 因而只能利用循環(huán)賦值. by gXX
[另解]把b1分解質(zhì)因數(shù), 然后用質(zhì)因數(shù)枚舉b1的所有約數(shù), 然后挨個(gè)求與a0的最大公約數(shù)和與b0的最小公倍數(shù).

10.2

tyvj迎國(guó)慶新賽制模擬賽, 160min, 預(yù)計(jì)150 -> 60/110
60min時(shí)讀題結(jié)束(大概開(kāi)場(chǎng)25min才開(kāi)始看題)

ship[雜題], 84min, 預(yù)計(jì)?
[題意]給定一個(gè)正n邊形, 在每個(gè)頂點(diǎn)上放高度不同的柱子, 使得高度最高的柱子構(gòu)成的多邊形的重心落在多邊形內(nèi).
1. 所有柱子同高顯然符合條件
2. 高度最高的柱子構(gòu)成正多邊形同樣符合條件, 即重心和正n邊形重合
3. 重心不和正n邊形重合且不在邊界上, 判斷無(wú)能
*需要注意的是2和3, 在看了coderspace的答疑之后才想到.

game[模擬_60/], 160min, 預(yù)計(jì)?
"他就要從自己從左邊記下的數(shù)字和從右邊記下的數(shù)字中分別選取一個(gè)數(shù), 將大的減去小的并大聲喊出來(lái)."
->O(N^2), 60
對(duì)于每個(gè)小朋友, 向左向右記錄符合條件的最值. 如果兩邊同時(shí)記錄了最值, 那么輸出max{MaxL-MinR, MaxR-MinL}. 否則輸出-1.
*這題讀錯(cuò)很多次, 一開(kāi)始的想法并不正確, 之后有認(rèn)為是最長(zhǎng)不下降子序列, 并復(fù)習(xí)了O(NlogN)做法. 但事實(shí)上符合條件的序列不是單調(diào)的. 需要在紙上抽象出條件.

maze2[二分+floodfill/], 120min, 預(yù)計(jì)AC
[題意]從(1,1)到(n,m)存在一條路, 使得途中的曼哈頓距離k最大.
對(duì)于每個(gè)k, 第一次floodfill表示c個(gè)面包圈附近所有曼哈頓距離d<=k的點(diǎn). 然后從(1,1)進(jìn)行第二次floodfill, 已標(biāo)記的點(diǎn)不能通過(guò), 若可以到的(m,n)則滿足題意.
*需要注意可以從上下左右任意方向走, 只通過(guò)右下方向會(huì)忽略很多情況.(by coderspace)
*這題是gXX出的, gXX表示標(biāo)準(zhǔn)做法不是二分

tyvj迎國(guó)慶新賽制模擬賽[170/600] -> 各種問(wèn)題亟待解決

10.17
[BYVoid Stage1] 3h + 2.5h, 位置值25%
寫(xiě)了2h, 前兩題預(yù)計(jì)AC, 第三題滿分算法需要遞推式, 70%算法看不出來(lái); 第四題類似OPEN11的第一題, 各種心理陰影. 第二題花了20min練習(xí)對(duì)拍.
[summary], 130 = 10 + 100 + 10 + 10;

P1: BFS染色看成DFS染色, 需要注意更新條件(G[kx][ky] > G[x][y]+1), 否則會(huì)超時(shí) -> 涉及最短路徑的問(wèn)題顯然是BFS, DFS會(huì)造成各種奇葩的問(wèn)題
*事實(shí)上還是腦抽了, 標(biāo)準(zhǔn)做法O(MN), 將所有傳染源加入隊(duì)列, 直接BFS即可.

P2: 分組背包問(wèn)題, 差點(diǎn)看成泛化物品. 數(shù)據(jù)很弱, 用來(lái)對(duì)拍的暴搜同樣AC.
*O(ABN), 和標(biāo)準(zhǔn)做法一樣, 而且利用了0/1背包的性質(zhì)直接降維, 減少內(nèi)存使用.

P3: 看了題解, 收獲很多.
(1)從數(shù)學(xué)角度考慮, 70
不妨考慮題目的退化情況, 即不存在棧元素?cái)?shù)量p的限制. 注意到1號(hào)元素比較特殊, 初始時(shí)1號(hào)元素必須先行進(jìn)入b棧, 然后進(jìn)入c棧. 故而可以劃分為兩個(gè)過(guò)程, 過(guò)程I在a元素進(jìn)入c棧之前, 過(guò)程II在a元素進(jìn)入c棧之后. 利用乘法原理f[n] = Σf[k]*f[n-k-1](0<=k<i). 當(dāng)然這東西其實(shí)就是Catalan數(shù).
*白書(shū)上給出了另一種推導(dǎo)方式, 利用凸多邊形上的分割. 固定一三角形V1VkVn, 討論其兩側(cè)的多邊形的情況, 故而f[n] = Σf[k][n-k+1](k>=2), f[2]=f[3]=1. 也可以通過(guò)固定對(duì)角線的方式討論, 注意到每條對(duì)角線被重復(fù)計(jì)算了2n-6次(凸n邊形僅有n-3條對(duì)角線), f[n] = Σf[k]*f[n-k+2]*n/(2n-6). 與上式聯(lián)立可知, f[n+1] = f[n]*(4n-6)/n.
*這里的推導(dǎo)方法和第二類stirling數(shù)的推導(dǎo)方式類似, 考慮一個(gè)特殊元素的動(dòng)作, 然后劃分問(wèn)題(利用乘法原理).
加上棧元素?cái)?shù)量的限制, f(i,j)表示i個(gè)元素在棧元素限制為j時(shí)的方法數(shù), 可得f[n][p] = Σf[k][p-1]*f[n-k-1][p](0<=k<n), f[i][0] = 0(0<i<=n), f[0][j] = 1(0<=j<=n)
(2)從動(dòng)態(tài)規(guī)劃角度考慮, AC
考慮到題目中存在三個(gè)棧a\b\c, 設(shè)置狀態(tài)為f(i,j,k)表示a棧中有i個(gè)元素, b棧中有j個(gè)元素, c棧中有k個(gè)元素的方法數(shù), 注意到i+j+k=n, 故只用f(i,j)即可.
若a棧中有i個(gè)元素, b棧中有j個(gè)元素, 可能是a棧中的1個(gè)元素到b棧中, 亦可能是b棧中一個(gè)元素到c棧中, 故而方程為f[i][j] = f[i+1][j-1] + f[i][j+1], f[n][0] = 1, f(0,0)為所求. 這個(gè)方程應(yīng)該同樣適用于無(wú)棧元素限制的情況(即沒(méi)有特別的限制).
*數(shù)學(xué)上的遞推式的思考方式, 往往是固定或者討論1個(gè)元素, 進(jìn)而劃分問(wèn)題或者類似情況. 而DP的思考方式, 建立在狀態(tài)的基礎(chǔ)上, 注重狀態(tài)間的轉(zhuǎn)移, 進(jìn)而找到方程.
*一個(gè)小技巧, a mod 2^p = a & (2^p-1); 直觀上其實(shí)很容易理解, 轉(zhuǎn)化為2進(jìn)制看待, 取模即得到a二進(jìn)制下得后p位, 和位運(yùn)算與的目的是一樣的.

P4: 需要抽象出最短路模型, SPFA即可.(注意此時(shí)的點(diǎn)數(shù)不超過(guò)p*p, 而不是p)
注意到題目中同種能量結(jié)界可以無(wú)損耗傳送, 不妨將每個(gè)能量結(jié)界縮為一點(diǎn), 于是可以得到一個(gè)新的圖. 為了簡(jiǎn)化計(jì)算, 在第一行前增加起點(diǎn), 在最后一行后增加終點(diǎn). 求出從起點(diǎn)到終點(diǎn)的最小點(diǎn)權(quán)覆蓋即為答案. 然后題解中給出了一種很神奇的構(gòu)造, 將起點(diǎn)和終點(diǎn)外的點(diǎn)形成的邊拆成兩個(gè)邊, 邊權(quán)為邊終點(diǎn)的點(diǎn)權(quán), 起點(diǎn)和終點(diǎn)僅考慮單向. 利用鄰接表實(shí)現(xiàn), 可以利用一個(gè)bool型數(shù)組判重. 之后利用SPFA求最短路, h-d[p+1]即為答案, 小于0輸出NO.
*關(guān)鍵在于1) 以能量結(jié)界為點(diǎn)抽象出圖, 轉(zhuǎn)化為最小點(diǎn)權(quán)覆蓋.
2) 拆邊賦權(quán), 轉(zhuǎn)化為最短路模型.

10.18

USACO Contest OPEN11 cornmaze(BFS), 2h
略復(fù)雜的BFS, 寫(xiě)了約30min, 調(diào)了1.5h. 主要卡在兩個(gè)錯(cuò)誤和STL的語(yǔ)法上.
按照題意, 從起點(diǎn)開(kāi)始, 如果遇到裝置直接跳, 遇到草地繼續(xù)走, 遇到玉米就終止, 直接BFS即可. 注意到題目中的裝置成對(duì)出現(xiàn), 而且遇到裝置必須走, 這和昨天的第四題不同. 可以利用map數(shù)組記錄裝置的對(duì)應(yīng)關(guān)系.
*對(duì)于一對(duì)裝置, 從A到B, 只需標(biāo)記A已讀, 無(wú)需標(biāo)記B已讀, 可能出現(xiàn)跳過(guò)來(lái)又跳回去更短的情況. 但是要使B入隊(duì), 并且更新B的距離, 而不是更新A的距離.
*利用x*n+y對(duì)坐標(biāo)編碼的時(shí)候, 充要條件是n>=m, 否則解碼會(huì)出現(xiàn)錯(cuò)誤. 因而可以利用x*(n*m)+y進(jìn)行編碼, 在不溢出int的情況下. 當(dāng)時(shí)在白書(shū)上見(jiàn)到這種寫(xiě)法, n=m, 并且坐標(biāo)從0開(kāi)始.

10.19

Tyvj新賽制模擬賽 stock, unAC.

10.20

stock[傳遞閉包]
題意就是確保每條需要添加的邊(x,y), (y,x)不連通, 且x!=y(即點(diǎn)上沒(méi)有自環(huán)).
和wx神牛給出的做法一樣, 維護(hù)一個(gè)N*N的矩陣表示連通性, 若加入邊(x,y), 則更新x的前驅(qū)和與y的后繼的集合(x,y分別在集合中)的邊為連通.
*復(fù)習(xí)了對(duì)拍的寫(xiě)法, 昨天查錯(cuò)查了1h, 寫(xiě)了O(N^2*T)的寫(xiě)法:
 (1)更改了已連通點(diǎn)的情況
 (2)沒(méi)有考慮x的前驅(qū)和y的后繼直接連通的情況
 (3)沒(méi)有考慮點(diǎn)的自環(huán)(make中人為避免了這種情況, 審題不清.)
*參照題解寫(xiě)O(NT), 更新連通情況時(shí)G[A[i]][B[j]]打成G[A[i]][B[i]], 對(duì)拍后發(fā)現(xiàn).
*當(dāng)時(shí)的DFS寫(xiě)法的問(wèn)題, 修正后50:
 (1)沒(méi)有考慮重邊的情況, 因而對(duì)于每一條邊都要重新加入, 數(shù)組必然會(huì)爆. 可以利用矩陣維護(hù)已添邊, 這樣的話復(fù)雜度應(yīng)該為O(N^2*P).
 (2)next[]數(shù)組范圍開(kāi)小

[BYVoid Stage2] 1.5h, 完全不會(huì). -> 眼高手低
以下是對(duì)于題意的簡(jiǎn)單判斷, 看起來(lái)和去年差不多, 眼高手低:
P1: 模擬, 但是概率無(wú)能
P2: DP, 沒(méi)想出方程
P3: DP + 多重背包?
P4: 極大強(qiáng)連通分量, Tarjan忘了, 裸的做法不會(huì)(注意到范圍很小)
-> 題解顯示方向判斷基本正確, 基本思路都正確, 但是實(shí)現(xiàn)都卡在某些地方

P1:分為兩個(gè)部分, 求概率和期望, 有1個(gè)trick.
對(duì)于概率可以分四個(gè)部分討論:
 (1) 無(wú)事故 -> 按照題意, 乘以無(wú)事故概率分別計(jì)算即可
 (2) 同時(shí)事故 -> 平局, 把四個(gè)獨(dú)立事件(故障)乘起來(lái)
 (3) 侏儒事故 -> 地精勝利, 地精無(wú)事故*侏儒事故概率  ->需要注意這里不需要考慮無(wú)事故獲勝概率, 仔細(xì)讀題
 (4) 地精事故 -> 侏儒勝利, 類似上文
*需要注意利用pow(sum,1/n)開(kāi)n次方的時(shí)候, 必須邊讀入邊計(jì)算, N = 1e6. 可以利用e^((1/n)*ln(a)) = a^(1/n)來(lái)計(jì)算.
*沒(méi)有在分類基礎(chǔ)上結(jié)合題意繼續(xù)討論, 導(dǎo)致理解偏差, 于是沒(méi)想出來(lái).

P2:我想的方程的狀態(tài)是f(i,j)表示疲勞度為i, 行走距離為j, f(i,j)表示所需最小時(shí)間.
所以方程 f(i,j) = min{f(i-1, j+1), f(i+2, j+5), f(i+5, j+10)} + 1 (i ≠ p)
 f(p-10, j+10) + 10 (i = p)
以距離為階段, 沒(méi)有后效性, 看起來(lái)如果記憶化, f(0,0)是答案. 但min給初始化造成了一定的麻煩; 更重要的是, 這樣的方程使用滾動(dòng)數(shù)組較為麻煩, 會(huì)爆內(nèi)存.
*事實(shí)上i == p的情況不會(huì)得到最優(yōu)結(jié)果, 即干擾條件. 要避免疲勞度達(dá)到上限.
改進(jìn)做法是這樣, f(i,j)表示行走最大距離, i表示花費(fèi)時(shí)間, j表示疲勞度, 可以得到方程:
f(i, j) = max{f(i-1, j+1)+1, f(i-1, j-2)+5, f(i-1, j-5)+10}
需要利用滾動(dòng)數(shù)組降維, 即for(i = 1, k = 1; i <= S; i++, k = !k)
*需要指出方程不太嚴(yán)謹(jǐn), 考慮S=1, P=1, 條件1的1+1>P, 所以需要特殊處理.
*太久沒(méi)寫(xiě)DP了, 所以方程細(xì)節(jié)問(wèn)題很多.

10.22
東方幻想鄉(xiāng)Stage1, 2.5h, 215 -> 310, 位置值65%
*發(fā)現(xiàn)solution一個(gè)很好的用途, 比較命題人給出的題意, 鍛煉從題目中抽取信息的能力.

P1: 模擬+分析, 20min, AC
(1) 計(jì)算整個(gè)序列的位移向量a
(2) T/len * a, T%len模擬
*個(gè)人覺(jué)得亦可正交分解, 統(tǒng)計(jì)不同方向向量個(gè)數(shù)(N S對(duì)稱, W E對(duì)稱), 做法同上.

P2: 二分高精除法, 1h, TLE原因不知
*[沒(méi)有注意到范圍] O(LlogANS), 題目中給的ANS<=2*1e9, 而我算的ANS是1e20000. 本來(lái)是20000*9, 范圍錯(cuò)誤后, 20000*20000, 顯然TLE.
*按位除效率高于二分高精除 by qz神牛
*其實(shí)直接寫(xiě)單精度乘法即可
*題解中二分條件, left+1<right;left = mid;right = mid;
*INT_MAX的另一種寫(xiě)法, ~0U>>1, U表示無(wú)符號(hào)整數(shù) by WJMZBMR

P3: DP+優(yōu)化(單調(diào)隊(duì)列\(zhòng)優(yōu)先隊(duì)列), 60
f[i]表示在i取得的最大冰凍指數(shù)值
f[i] = max{f[i-j] + A[i]}(L<=j<=R, 0<=i<=n+R)
利用prev[i]記錄f[i]由f[i-j]推得, 遞歸即可記錄方案.
*2個(gè)trick, 存在負(fù)數(shù)(初始化-INF), 可以越過(guò)終點(diǎn)(前驅(qū)必須在終點(diǎn)前) -> 注意數(shù)組大小為f[N+R], 否則溢出

P4: 強(qiáng)連通分量(Floyd傳遞閉包+并查集), 50
利用Floyd傳遞閉包, 對(duì)于每一點(diǎn)對(duì)(u,v), 若是雙向連通則使用并查集合并集合{u},{v}. 統(tǒng)計(jì)元素?cái)?shù)最多Max的集合, 從頭開(kāi)始掃面每個(gè)節(jié)點(diǎn)所屬集合, 遇到所屬集合元素?cái)?shù)量為Max的點(diǎn)直接跳出. 掃描該集合即可輸出方案.

10.23

toj 1169 廣告印刷[單調(diào)隊(duì)列]
NOI導(dǎo)刊(11.5)例題, 使得隊(duì)列中元素大小和下標(biāo)同時(shí)單調(diào). TLE, 原因未知.

[東方幻想鄉(xiāng)S1P2]iceroad, DP+單調(diào)隊(duì)列, AC
維護(hù)區(qū)間[i-R, i-L]的最大值, 先檢查隊(duì)列中元素下標(biāo)的合法性(即滿足q[head]>=i-R), 然后插入元素f[i-L].
*越過(guò)終點(diǎn)的情況必須初始化A[], 否則會(huì)造成答案錯(cuò)誤.
*按照std, 必須初始化為0, 否則最后兩個(gè)點(diǎn)WA. -> 數(shù)組溢出, 必須初始化為-INF, 數(shù)據(jù)弱, wagner的std會(huì)掛
*對(duì)于大數(shù)據(jù)掛掉的情況, 很可能是由于數(shù)組溢出

[東方幻想鄉(xiāng)S1P3]classroom, Floyd+并查集, 60
(1) 一個(gè)錯(cuò)誤,如果存在邊(v,u)會(huì)被刪除.
G[v][u] = (type == 2) ? 1 : 0; -> 考慮之前存在邊(u, v)
*縮略形式很可能是不等價(jià)的, 要考慮全面
(2) 記錄集合元素個(gè)數(shù)的寫(xiě)法
path[y] = path[x];
tot[x] += tot[y];
可以這么解釋, find(y)會(huì)指向x, 于是更新x的元素個(gè)數(shù).
*想起了Tyvj9月月賽第二題

10.24
東方幻想鄉(xiāng)Stage2, 2.5h, 200, 位置值82%
P1: 簡(jiǎn)化版最大子矩陣, AC.
給出了矩陣大小(R,C), 令s[i][j]表示Σs[1..i][1..j], 只需枚舉[R,N, C,M]作為矩陣頂點(diǎn)計(jì)算大小即可.
s[i][j] = s[i][j-1] + s[i-1][j] - s[i-1][j-1] + A[i][j]
矩陣大小S = s[i][j] - s[i][j-C] - s[i-R][j] + s[i-R][j-C]

P2: 進(jìn)制轉(zhuǎn)換+同余, AC.
(1) 得到1..L位分別對(duì)于M取余的余數(shù)pow[i]
(2) O(L), 判斷當(dāng)前數(shù)是否整除
余數(shù)rem = Σs[L-i-1]*(A[i]-'A'), 利用傳遞性取余.
(3) O(L^2), 枚舉任意兩個(gè)數(shù)對(duì)(i,j), 交換后計(jì)算余數(shù), 若整除直接輸出結(jié)果
題目要求字典序最小, 指字符串[1..L], 需要注意下標(biāo) -> 這里浪費(fèi)了20min, 多次手工模擬錯(cuò)誤
交換的寫(xiě)法:
rem += M - ((s[i]-'A') * pow[L-i-1]) % M;//利用補(bǔ)數(shù), 分別減去i,j原來(lái)的位值
rem += ((s[j]-'A') * pow[L-i-1]) % M //加上i,j新的位值
*Win7一個(gè)奇葩的性質(zhì), patchouli因?yàn)橛嘘P(guān)鍵詞patch, 會(huì)默認(rèn)以管理員身份運(yùn)行, 于是調(diào)試無(wú)能.

P3: 似乎是計(jì)算幾何, 只想到了旋轉(zhuǎn)坐標(biāo)系. -> 預(yù)處理[排序]+DP
(1) 利用點(diǎn)斜式得到結(jié)論 d = y - kx, 以d為關(guān)鍵字對(duì)點(diǎn)進(jìn)行排序
(2) f[i]表示1..i點(diǎn)可以取到的最大值
f[i] = max{f[j] + Σvalue[i]*Σmul[i]/(j-i) (這里Σ的范圍是[j-i+1, i])} (0<j<i)
*對(duì)于α=90°的情況, 由于π的精度不夠, 可以不討論. -> 對(duì)x排序即可, 實(shí)現(xiàn)的話可以直接交換坐標(biāo)
*對(duì)于多點(diǎn)d相同的情況, 按solution寫(xiě)法應(yīng)該討論, 但是參照標(biāo)程特判會(huì)WA, 原因未知?

P4: 圖論題, 有條件的最短路問(wèn)題.
*分層圖最短路


10.27

東方幻想鄉(xiāng)Stage3, 2.5h, 110, 位置值64%
*心不在焉, 多次看錯(cuò)題.
*需要思考看完整套題的意義, 目的是什么, 需要得到什么樣的信息.

P1: 二分+模擬, 95
(1) 記錄被破壞點(diǎn)下一個(gè)被破壞點(diǎn)的位置next[]
(2) 以0為下界, [N/K]+1為上界, 二分答案L -> L=0即未被地震破壞, 考慮不周
(3) 利用next[]對(duì)數(shù)軸染色, 限制次數(shù)為K, 若染色后仍發(fā)現(xiàn)破壞點(diǎn)則無(wú)解

P2: 概率, 15, O(NT) -> 正解是DP
每個(gè)時(shí)刻更新每個(gè)點(diǎn)的概率, 利用鄰接表(矩陣實(shí)現(xiàn)). 不更新的充要條件是vis[v][u][k-1]=1.
用P[i][k]表示第i個(gè)點(diǎn)在第k時(shí)刻的概率, 初始化P[1][0] = 100.
*思路非常混亂, 一開(kāi)始不更新的充要條件找錯(cuò). 錯(cuò)誤原因不知.
*不明白O(NT)的做法為什么會(huì)錯(cuò), 標(biāo)程用類似樹(shù)形DP.

P3: 最小生成樹(shù)+并查集維護(hù)連通性+枚舉 -> 不用并查集
利用Kruskal構(gòu)造最小生成樹(shù), 并查集記錄連通情況, 利用鄰接矩陣維護(hù), 枚舉每個(gè)度大于2的點(diǎn)不斷按照定義更新答案.
*考慮到多邊權(quán)重相等的情況, 可能需要多次計(jì)算.

P4: LCS? -> 搜索+剪枝

posted @ 2011-11-05 14:05 Climber.pI 閱讀(230) | 評(píng)論 (0)編輯 收藏

NOI Linux+VMware 安裝手記

之前用Sun Virtual Box裝了新的NOI Linux,Ubuntu的版本新了好多,界面感覺(jué)不錯(cuò)。感覺(jué)閹割了非常多的東西,比如OpenOffice,昨天下的rpm安裝無(wú)能。把涉及的幾個(gè)問(wèn)題整理一下,如下:
(1)如何讓Ubuntu和Win7共享文件
VBox下沒(méi)解決這個(gè)問(wèn)題,之前用sudo居然不知道密碼不會(huì)顯示。于是轉(zhuǎn)戰(zhàn)VMware,然后網(wǎng)速不太給力,下了一個(gè)下午。晚上基本弄好。主要是權(quán)限問(wèn)題,必須在terminal下運(yùn)行VMtools才可以。
【基本參考這里】http://blog.sina.com.cn/s/blog_726684020100r1os.html
【以下轉(zhuǎn)載】

step1.安裝vmtools for linux:

選擇VM >Reinstall VMware tools...

之后虛擬機(jī)中ubuntu桌面出現(xiàn)VMware Tools的光盤(pán)符號(hào)

在ubuntu里輸入以下命令(使用root帳號(hào))

mkdir  /mnt/cdrom
mount /dev/cdrom /mnt/cdrom

cd /mnt/cdrom

tar -zxvf VMwareTools-8.1.3-203739.tar.gz -C /tmp

cd /tmp/vmware-tools-distrib
./vmware-install.pl

然后一路回車,要等一段時(shí)間才能安裝完畢。

查看安裝后情況,使用以下命令:
lsmod

step2.設(shè)置共享目錄: 選擇VM>Settings>Options>Shared Folders

step3.在ubuntu中查看共享目錄 
輸入以下命令
cd /mnt/hgfs
ls
可以看到win7系統(tǒng)中共享的目錄。


(2)如何打開(kāi)MSOffice文件

可以去下載永中Office解壓后,在terminal下載安裝,進(jìn)入目錄后運(yùn)行./setup,可以看到圖形界面。注意主程序是精簡(jiǎn)版的,其他四個(gè)部分需要分別安裝。

這里的版本是2010。永中Office對(duì)于圖文并排的Word文檔支持不佳。


(3)如何打開(kāi)*.rar且顯示中文

不要rar,在新立得中安裝unrar unrar-free

*因?yàn)閞ar和7z是Win下的格式,因而需要手工處理。zip完全不存在這樣的問(wèn)題。

(4)Tex的安裝
http://twntwn.info/blog/ajer001/archives/1728

這陣子開(kāi)始玩 LaTeX,果真是一個(gè)可怕的東西。現(xiàn)在正在努力的撈,紀(jì)錄一下安裝、CJK 環(huán)境等等。

1. 安裝:

sudo apt-get install texlive dvipdfmx cjk-latex

這樣就可以了。如果還需要 IDE 介面:

sudo apt-get install texmaker

兩個(gè)東西很大,400+M,要下一陣子。

1. 直接使用locale-gen
在終端輸入命令:
sudo locale-gen zh_CN.GB18030
即可完成中文字符集的添加。完成后可以轉(zhuǎn)到

/usr/lib/locale/,下面已經(jīng)有一個(gè)zh_CN.gb18030文件夾;在超級(jí)終端輸入命令:

gedit /var/lib/locales/supported.d/local,可以發(fā)現(xiàn)文件中多了一行:zh_CN.GB18030 GB18030。說(shuō)明添加成功。



(5)讓Texmaker支持中文
http://hi.baidu.com/huaerzaikai/blog/item/8cc478b5c227b1c237d3cabd.html

(6)一句話總結(jié)
不要用VMware Player的自動(dòng)安裝功能。
linux的命令行無(wú)比強(qiáng)大。

posted @ 2011-10-30 12:00 Climber.pI 閱讀(2412) | 評(píng)論 (0)編輯 收藏

初賽散記

回家的一天多, 狀態(tài)很頹, "勤能補(bǔ)拙是良訓(xùn), 一分辛苦一分才", 我還是太懶了.
試室里熟人很多, 見(jiàn)了好多人, 和夏侯同桌. 題目很水, 于是被坑了, 相較于最近五年的真題, 完善程序的難度再創(chuàng)新低, 問(wèn)題解決也水的可以, 于是分?jǐn)?shù)下水漲船高, 加之名額減少. 形勢(shì)急矣.
幾乎是考出經(jīng)驗(yàn)了, 所有準(zhǔn)備非常充分的筆試, 大都會(huì)出現(xiàn)一些不由自主的看錯(cuò), 解決的方式不外乎多看幾遍. NOIp初賽的區(qū)分度主要來(lái)自完善和問(wèn)題解決, 但是這兩部分今年都成了水題, 閱讀分值大, 丟不起.
反正肯定過(guò)了, 怨天尤人毫無(wú)意義.

可以反映出一些訓(xùn)練中存在的問(wèn)題:
1. 如何查錯(cuò) -> 反復(fù)
2. 寫(xiě)的大多是寫(xiě)過(guò)的陳題, 很少寫(xiě)新題
3. 太依賴第一印象 -> 批判性思維

這次初賽全卷初步寫(xiě)完還有幾乎1h的時(shí)間, 但是接下來(lái)的1h卻沒(méi)有得到任何分?jǐn)?shù), 雖然查到了10分左右的錯(cuò)誤但是并未改對(duì). 越是簡(jiǎn)單題越要反復(fù)讀題, 做的慢反而不會(huì)出問(wèn)題. 如果定義一個(gè)概念叫做有效時(shí)間的話. 去年初賽的有效時(shí)間就是開(kāi)場(chǎng)的幾十分鐘和最后的幾十分鐘, 今年初賽的有效時(shí)間就是第一小時(shí), 去年復(fù)賽的有效時(shí)間只有1h, 前年復(fù)賽的有效時(shí)間是1.5h. 如何讓剩下的時(shí)間變成有效時(shí)間, 亟待解決.
仔細(xì)想想, 我習(xí)慣開(kāi)場(chǎng)先通讀題目做出大致判斷, 但是沒(méi)有考慮第一反應(yīng)錯(cuò)了會(huì)怎么辦, 也就是說(shuō)對(duì)大方向的質(zhì)疑很少. 昨天第三題和第四題很可能都是由于第一印象導(dǎo)致分析出現(xiàn)偏差, 尤其是第四題, 開(kāi)場(chǎng)認(rèn)為大方向是圖論, 于是孤立看待矩陣中的每個(gè)點(diǎn), 認(rèn)為第四題的矩陣是類似鄰接表的東西, 一直朝這個(gè)方向想. 只要和題意南轅北轍, 剩下的就是浪費(fèi)時(shí)間. 最后五分鐘想到了正確思路, 枚舉k=1,2,3..的答案, 然后找遞推式, 這是正確思路之一. 亦可以直接觀察. 于是知道的越多反而更容易理解錯(cuò), 除非很熟練, 自行車?yán)碚撨M(jìn)一步得到證實(shí)啊.

對(duì)于復(fù)賽也是一樣的問(wèn)題, 新賽制模擬賽暴露的主要問(wèn)題也是寫(xiě)完程序后, 無(wú)法確定正確性. 我需要的不是計(jì)劃, 而是切實(shí)可行的步驟. 初賽和復(fù)賽沒(méi)什么關(guān)系, 歷史已經(jīng)證明了這點(diǎn). 我需要coding, 每周30h, 充實(shí)的時(shí)候往往沒(méi)有太多記憶, 記憶源于彷徨和不安. 
可以考慮每天寫(xiě)計(jì)劃, 然后寫(xiě)總結(jié), 時(shí)間不在多.
---------------------------------------------------------------------------
對(duì)于分?jǐn)?shù)線的估計(jì), 提高全場(chǎng)最高wx93, 普及最高87.5, 提高60+ 20余人, 普及60+ 15人. 按照往年形勢(shì)估計(jì), 分?jǐn)?shù)線可能在60左右, 如果省里認(rèn)為區(qū)分度有問(wèn)題的話不排除降分的可能. lsm還是有可能過(guò)線的. 接了fsm的電話以后感覺(jué)好多了. 晚上和qj以及gXX神牛聊了一下天, 問(wèn)了一些備考的問(wèn)題和別的事情. 沒(méi)有時(shí)間頹廢, 即使是金中這樣的學(xué)校, 仍然有和大部分人方向不一致, 何況高級(jí). 零散的時(shí)間可以用來(lái)寫(xiě)水題和思考算法, 大塊時(shí)間不能浪費(fèi), 還是要用來(lái)寫(xiě)模擬賽. 邊緣內(nèi)容很多, 比如線段樹(shù), 比如費(fèi)用流.

于是這周空白的作業(yè)怎么辦?

posted @ 2011-10-15 20:50 Climber.pI 閱讀(279) | 評(píng)論 (0)編輯 收藏

僅列出標(biāo)題
共8頁(yè): 1 2 3 4 5 6 7 8 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美三日本三级少妇三2023| 午夜精品影院在线观看| 欧美在线免费播放| 欧美日韩免费一区| 在线视频亚洲一区| 久久精品中文| 国产私拍一区| 久久精品国产亚洲一区二区| 久久夜色精品国产欧美乱| 国产精品免费一区豆花| 香港成人在线视频| 亚洲国产欧美一区二区三区久久| 噜噜噜久久亚洲精品国产品小说| 99国产精品99久久久久久| 久久九九国产| 在线观看视频一区二区| 欧美成人精品高清在线播放| 一区二区三区久久| 欧美成人精品三级在线观看| 午夜精品久久久久久久久| 国产日本欧洲亚洲| 国产精品久久91| 久久综合久久综合久久综合| 亚洲尤物精选| 亚洲精品一区二区三区四区高清 | 欧美三区美女| 亚洲一区二区精品| 99热精品在线观看| 一区二区欧美在线| 亚洲激情六月丁香| 欧美激情性爽国产精品17p| 久久精品国产99国产精品| 亚洲视频精品在线| 亚洲精选视频在线| 在线不卡视频| 亚洲人成欧美中文字幕| 久久久久久香蕉网| 午夜亚洲视频| 羞羞色国产精品| 亚洲尤物精选| 亚洲免费在线视频| 久久久久久国产精品一区| 欧美自拍偷拍午夜视频| 欧美影院在线播放| 久久国产欧美日韩精品| 久久精品视频播放| 欧美成人黄色小视频| 亚洲二区三区四区| 夜夜精品视频一区二区| 亚洲精品在线一区二区| 亚洲视频在线观看免费| 久久久久久久综合日本| 裸体女人亚洲精品一区| 欧美国产日韩一区二区| 国产精品久久777777毛茸茸| 在线播放视频一区| 亚洲欧美日本伦理| 久久久久久久高潮| 亚洲日本中文字幕| 亚洲一二三四区| 久久久久亚洲综合| 亚洲精品国产精品乱码不99| 亚洲一级在线观看| 久久综合伊人77777尤物| 欧美日韩精品久久久| 国产在线视频欧美一区二区三区| 亚洲欧洲精品一区二区三区| 亚洲欧美日韩天堂| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精品男同| 亚洲综合电影一区二区三区| 欧美成人一二三| 国产伪娘ts一区 | 国产精品一区在线观看你懂的 | 在线免费高清一区二区三区| 狠狠色丁香婷婷综合影院| 亚洲国内欧美| 亚洲先锋成人| 免费成人网www| 一区二区三区日韩欧美| 欧美精品久久99| 亚洲精品美女| 欧美成人免费一级人片100| 欧美淫片网站| 国产日韩欧美一区二区三区四区 | 一个人看的www久久| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲一区免费视频| 欧美了一区在线观看| 亚洲国产精品成人久久综合一区| 欧美一区二区私人影院日本| 亚洲视频1区| 欧美无砖砖区免费| 久久精品国产精品亚洲综合| 久久精品国产一区二区三区| 韩国一区电影| 亚洲精品欧美日韩专区| 国产精品久久久久久久久久免费 | 99视频精品| 久久精品一区二区三区四区| 91久久精品国产| 欧美1区2区| 欧美成人一区二区| 99精品热6080yy久久| 99在线精品视频在线观看| 国产一区在线看| 亚洲美女精品久久| 影院欧美亚洲| 亚洲精品国精品久久99热一| 免费91麻豆精品国产自产在线观看| 亚洲人线精品午夜| 一区二区三区毛片| 亚洲国产日韩精品| 亚洲午夜三级在线| 亚洲国产精品www| 亚洲特级片在线| 亚洲经典视频在线观看| 亚洲欧美在线免费| 亚洲精一区二区三区| 亚洲欧美在线一区| 亚洲欧美激情视频在线观看一区二区三区| 性欧美xxxx大乳国产app| 亚洲国产91色在线| 久久久噜噜噜久久中文字幕色伊伊| 亚洲一区二区精品| 欧美日韩福利视频| 牛夜精品久久久久久久99黑人 | 国产精品自拍网站| 亚洲理论在线观看| 99视频在线观看一区三区| 久久人人超碰| 欧美激情第9页| 亚洲电影免费在线观看| 美女诱惑黄网站一区| 久久久精品性| 亚洲电影专区| 欧美国产精品中文字幕| 免费一级欧美片在线观看| 国产一区二区三区在线观看精品| 亚洲日本中文字幕| 日韩视频免费观看高清完整版| 欧美大色视频| 亚洲人成人一区二区三区| 尤物九九久久国产精品的特点| 久久人人看视频| 欧美成人综合| 一区二区三区日韩欧美| 免费中文字幕日韩欧美| 欧美成人情趣视频| 一区二区三区回区在观看免费视频| 欧美激情小视频| 久久精品视频在线观看| 麻豆成人在线播放| 亚洲一区精彩视频| 国产一区二区视频在线观看| 欧美一区二区三区四区在线观看| 黑人巨大精品欧美黑白配亚洲| 亚洲一区二区少妇| 蜜臀a∨国产成人精品| 99国产精品国产精品久久| 国产精品免费一区二区三区在线观看 | 亚洲一级在线观看| 国产精品久久久久久一区二区三区| 亚洲欧美日韩一区二区在线| 欧美顶级少妇做爰| 久久裸体视频| 欧美一级在线亚洲天堂| 一区免费观看视频| 欧美日韩国产色视频| 麻豆av一区二区三区| 亚洲欧美成人在线| 亚洲精品日韩在线观看| 狂野欧美激情性xxxx| 香蕉成人伊视频在线观看| 精品动漫一区| **网站欧美大片在线观看| 国产女主播一区| 国产嫩草一区二区三区在线观看 | 欧美日韩一卡二卡| 久久久噜噜噜久噜久久| 午夜综合激情| 久久一区二区三区国产精品| 欧美亚洲在线观看| 在线午夜精品| 亚洲午夜在线视频| 久久精品一区二区三区四区| 久久精品女人的天堂av| 亚洲欧美资源在线| 亚洲女同精品视频| 欧美一区二区三区视频在线| 亚洲视频免费| 亚洲视频福利| 欧美尤物一区| 蜜桃久久精品乱码一区二区| 久久久久国产成人精品亚洲午夜| 久久精品国产精品| 欧美成人一区二区三区| 欧美精品一卡二卡| 国产日产亚洲精品系列| av成人国产|