2016年8月22日 星期一

Codeforces Round #368 (Div. 2)

經過了好久,終於晉級Div. 1了~~   Candidate Master 

希望之後能夠維持穩定再Div.1 ~~

http://www.codeforces.com/contest/707

題目:
pA : http://www.codeforces.com/contest/707/problem/A
pB : http://www.codeforces.com/contest/707/problem/B
pC : http://www.codeforces.com/contest/707/problem/C
pD : http://www.codeforces.com/contest/707/problem/D
pE : http://www.codeforces.com/contest/707/problem/E

My solutions :
pA : http://www.codeforces.com/contest/707/submission/19982541
pB : http://www.codeforces.com/contest/707/submission/19986266
pC : http://www.codeforces.com/contest/707/submission/19987375
pD : http://www.codeforces.com/contest/707/submission/20037472

題解:

pA :
題目大意:給你一個有n*m個像素的圖片(1<=n,m<=100),每個像素有六種顏色。只要一張圖片中,沒有C , M , Y,就是黑白照片,其他就是彩色照片。

這題主要要小心的部分是字元處理(很多hack神人都利用了這一點),用scanf的要特別特別特別注意!很容易因為字元就雷掉了。所以我用string XD。

pB :
題目大意:現在有n個城市,m條有權重的邊(1<=n,m<=10^5),這其中有k個城市(0<=k<=n)是補給站。現在,你必須要選擇一個不是補給站的城市i,以及一個補給站城市j,這兩座城市必須要有路徑相連。現在,你要想辦法使得權重和變成最小,請問有沒有辦法?

仔細想想後會發現:要使得權重和最小,那勢必說要使得經過的城市越少。那倒不如說,直接一個i(上述的i)跟j(上述的j)之間用一條邊連接就好------這就是重點。所以,我們只要拜訪所有的邊,就okay囉~~。複雜度:O(E)。

pC :
題目大意:給你一個直角三角形的任意一個邊,請給出另外兩個邊。

那我假設題目給我的是n好了,若n=1,2,那一定不行(最小的直角三邊行三個邊長是 3,4,5),最簡單的方法是說:a^2 + n^2 = b^2 ==> n^2 = b^2 - a^2 ==> n^2 = (a-b)(a+b)。那這個時候,我們就可以解聯立解說:a-b=1, a+b=n*n。若這個時候n是偶數,一直除以二,變成奇數即可。(可是我已經忘記我的code到底是如何神奇的運作了,因為這個在我小學六年級的時候就無意間不小心推出來了,所以就直接用,忘記如何解釋了。對於讀者,感到抱歉。)

pD :
題目大意:維護一個n*m書架(1<=n,m<=1000),q比詢問(1<=q<=10^5),這q比詢問中,有四種動作:1.把書放到(i,j) 2.把書從(i,j)移掉 3. 把橫列i中,有書的變沒書,沒書的變有書 4. 變成操作k的模樣。

這題解題其實可以用DFS實作:可以想像成這個狀態要前往那些狀態,這樣就可以用DFS了。詳細的話,可以參考我的code。

後記:
我發現,我擁有access to tags了 XD。



沒有留言:

張貼留言