UVA 10230 Savage Garden

這是個 L-shape 問題, 下面有一個不錯的介紹.
http://tmt514-blog.logdown.com/posts/549466-divide-and-conquer-method-v-l-shaped-brick-problem

解法就是按照上面的連結中2解法的思維去做一次模擬.因為除了迴遞最後一層的 L 形磚都不會有接觸, 所以我把它們都叫 e. 而為了防上顏色會和周邊的一樣, 所以最後一層 L 形磚是根據它的位置決定.

我在迴遞時是畫了正方形, 而不是 L 形. 這是為了令程式比較簡潔. 因為之後的迴遞畫的地方會和這個正方形有一格的重疊, 所以最終的答案都是正確的.

More...

Selenium Test in Headless Environment

Selenium 是一個主流的 automatic web test 工具, 他可以模擬使用者和網頁的互動. 你可以利用他為你的網頁提供自動的測試. 當你想更進一步自動化或時, 你就可能會想把測試放上 CI 伺服器, 可是 CI 伺服器是沒有圖形界面的, 運行一般的瀏覽器時, 會出現錯誤.

當然你可以改用 headless browser, 例如 phantomjs. 使用 headless browser 有時侯會導致更多的問題. 而且它不能代表到一般的使用者 (一般人可不會用 headless browser 上網) . 所以我們要用以下的工具了 - Xvfb.

Xvfb 可以幫助你處理圖像輸出, 即使沒有圖形界面也可以運行圖形程式.

我會介紹兩種方法. 第一種方法是自行設定整個環境. 第二個方法就是使用 docker + docker-selenium. 方法二會比較不容易出錯.

More...

UVA 10140 Prime Distance

我一開始的想法是先把范圍中的質數先找出來. 可是因為范圍 (2, 147, 483, 647) 太大, 所以先找 0 - sqrt(range) 中的質數. (如果 n 不是質數, 那他的其中一個因數會在 sqrt(n) 當中). 輸入test case 後再找那范圍中的質數. 最後用 lower_bound 和 upper_bound 解決

More...

POJ 1061 Frog Dating

貼一下之前做的題目. 題目解法就是extend gcd.
之前卡了好一陣子, 即使看了別人的做法也不明白.

上面已经列出找一个整数解的方法,在找到p*a+q*b = Gcd(a, b)的一组解p0,q0后,p*a+q*b = Gcd(a, b)的其他整数解满足:
p = p0 + b/Gcd(a, b)*t
q = q0 - a/Gcd(a, b)  t(其中t为任意整数)
至于pa+qb=c的整数解,只需将p*a+q*b = Gcd(a, b)的每个解乘上 c/Gcd(a, b) 即可,但是所得解并不是该方程的所有解,找其所有解的方法如下:
在找到p*a+q*b = Gcd(a, b)的一组解p0,q0后,可以
得到p*a+q*b = c的一组解p1 = p0*(c/Gcd(a,b)),q1 = q0*(c/Gcd(a,b)),p*a+q*b = c的其他整数解满足:
p = p1 + b/Gcd(a, b)*t
q = q1 - a/Gcd(a, b)*t(其中t为任意整数)
p 、q就是p*a+q*b = c的所有整数解。
當初想不到的重點baidu

More...

Docker in Docker

因為之前要把 jenkins 放在 docker 當中, 而 jenkins 要運行的 jobs 又用到了 docker. 所以研究了一下如何在 docker 中使用 docker. 方法主要有兩個, 以下會介紹一下.

  • 使用官方提供的docker image
  • 使用 host 的 docker binary 和 socket

More...