【Online Challenge】GOCC09 Google's Online Challenge


60分鍾兩道題,第一道樹相關占30分,第二道簡單數論占20分。時間分配嚴重不合理,第二題不到十分鍾就解決了,剩下的時間都在處理第一題的compile error……咕鴿online沒有錯誤提示,感覺和面試時候白板手寫代碼差不多了TvT再次讓我感到ide的偉大……

challenge幫你處理題目輸入輸出,和在leetcode做有點相似,你只要關心主邏輯就可以了。和leetcode不一樣的地方是,會把輸入輸出的過程給你看,畢竟你得知道輸入長什么樣,特別是圖,會有很多種表示方法。第一題我就在這里踩了坑,沒注意到邊的表示不是鄰接矩陣,而是拿了個vector存兩個頂點,還不告訴我誰是父結點誰是子結點(如果題目其實給的數據是按照父結點子結點的順序的話,請忽略之,腦子確實有點懵),於是sigsev了……

 

第一題:給一棵樹,要求找到距離最近且數值互質的祖先結點。

時間空間:(不記得了……)

測試組數T:(不記得了……)

結點個數N:1<=N<=105

每個結點的值Valuei:1<=Valuei<=100

太慘了,五個樣例都只過了一個……直接輸入輸出是不是都能拿分啊我沒試過,之前也沒找到這個比賽的題目信息啊(已善用搜索)

結束了還懵圈了一個小時,然后我大概意識到自己的錯誤,seq小的不一定是seq大的結點的祖先結點啊!感覺算法這邊得針對圖相關的題目查漏補缺一下了。

 

第二題:給三個數,類型是long long,定義一次操作是將其中兩個數同時減一,但不能將任何一個數減至負數。問最大操作數是多少。

例子是2 3 4,可行的操作是

第一種:2 3 4 → 1 2 4 → 0 1 4 → 0 0 3      三次操作

第二種:2 3 4 → 2 2 3 → 2 1 2 → 1 1 1 → 0 0 1  四次操作

顯然就是四次操作是最大操作數了……

看到標題里有“最大”,我還以為會用dp……

思路很明確,直接上代碼吧

long long maxOpNum(long a, long b, long c) {
    long long x, y, z;
    x = max(max(a, b), c);
    y = min(min(a, b), c);
    z = a + b + c - x - y;
    if (x >= y + z) {
        return y + z;
    }
    return (x + y + z) >> 1;
}

 

總體來說應該是不難的,但是因為各種原因,不熟練、有知識漏洞、讀題做題習慣,時間不夠用。練習時間還是太少了……

Anyway,加油鴨ヾ(◍°∇°◍)ノ゙

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM