2016年6月19日 星期日

Codeforces Round #355 (Div. 2)

((好久沒po題解了,最近在忙 2016延平電資營YPCS 的題目,到時候我也會一併把題目&祥解放在這裡喔。幫忙按個讚吧!

到時候 pE 的詳解 會在放上去,現在沒空寫 pE

題目:

pA : http://codeforces.com/contest/677/problem/A
pB : http://codeforces.com/contest/677/problem/B
pC : http://codeforces.com/contest/677/problem/C
pD : http://codeforces.com/contest/677/problem/D

我AC的code :

pA : http://codeforces.com/contest/677/submission/18186305
pB : http://codeforces.com/contest/677/submission/18215807
pC : http://codeforces.com/contest/677/submission/18195576
pD : http://codeforces.com/contest/677/submission/18452316

題解:

pA :
這題只要把輸入的n個數字,只要<=h,ans+=1;>h,ans+=2。就okay了。

pB :
題目大意:給你n個長度ai(1<=i<=n)個馬鈴薯,一個長度h的垂直食物處理器,保證h>=所有ai。現在,你要依序把馬鈴薯放到處理器裡面,直到再放入一個高度會超過h,或者是沒有馬鈴薯。而這個食物處理器每次會切到k長度的馬鈴薯。如果長度不到k,那就會全部切掉。問說,最少需要幾次,才可以把馬鈴薯切完。

要小心。。。這題要開long long(要不然會被hacked !!!)
就是呢,先給一個想法:假設你現在有長度和x個馬鈴薯,你可以把這些馬鈴薯切完後,再把後面的放進去(想想看,可以這樣的!!!)!於是乎,按照這個邏輯下去greedy : 如果現在的長度加上新的長度會>h,就先把這些長度切到<k,如果加了還是>h,就把剩下切完,要不然就把k 加進去,如果<=h,就加進去!

這樣子greedy,複雜度O(n):陣列掃過一遍就okay了。

pC :
題目大意:我們現在定義:A-Z代表10~35, a~z代表36~61,-是62,_是63。現在給你一個長度s的字串,包含0~9, A~Z, a~z, - , _ ,請你把它視為一個64進位的數字。現在,問你說,有多少個對數字,他們彼此做&運算後,會剛好等於題目給的字串!

仔細想想,如果題目給的字串換成二進位後有m個0,n個1,那麼,0一定要0 & 0,沒有甚麼好討論的,但是,1就可以0 & 1 , 1 & 1 , 1 & 0三種。所以,對於每個1,都有三種作法,於是乎,輸出3 ^ n就好了!

pD :
待補,有點累了~~



沒有留言:

張貼留言