0w1

Entries from 2016-08-20 to 1 day

LHPC 2016 pE. 教官的名字 ( Ad hoc, 構造, String, square-free sequence )

這題是需要想一下的構造題。本來想放棄亂寫 hash 臨時判斷,本地建答案,但突然想遞迴構造看看。 一開始我們有正確的 "ABC" 如果把 A, B, 和 C 當成各自不同的 pattern, 也就是說令 A = 某個 'A', 'B', 'C' 組成的亂七八糟的字串,B, C 亦同,並保證一些性質…

LHPC 2016 pF. 毛毛蟲 ( Ad hoc )

本來以為很困難,最後幾分鐘突然靈感來。 假設由左到右有若干連續的人往右看,接著若干連續一排人往左看,那麼,哭哭的次數是固定的。假設左邊的人數為 L, 右邊的人數為 R, 考慮其中任何一個人,不失一般性取向右看的其中一人,不管他待到右邊的所有人都不見…

LHPC 2016 pD. 九連環 ( Hanoi's Tower + Fast Matrix Multiplication )

蠻有趣的一道題。首先要觀察當 N ≥ 3 的時候,其實是先進行一次 N - 2 的子問題,取走最下面的盤子,然後再反著做一次 N - 2 的子問題,經過這三個步驟之後轉換成 N - 1 的子問題,遞迴下去,直到 N ≤ 2 直接解決。因此令 f( N ) 為 N 個環的步驟數,會有 但…

LHPC 2016 pC. 跳格子 ( DP )

沒有什麼玄機的 DP,注意要 long long。 void solve(){ int N, M; cin >> N >> M; vvi C( 3, vi( 3 ) ); for( int i = 0; i < 3; ++i ) for( int j = 0; j < 3; ++j ) cin >> C[ i ][ j ]; vvi G( N, vi( M ) ); vvl dp( N, vl( M ) ); for( int i = 0; i < …

LHPC 2016 pB. 剪紙 ( Binary Search )

最大最小值問題十之八九是二分搜。能剪的次數和最短紙的最長長度,顯然成單調關係,因此可以用二分搜處理。注意最短長度的上界是原先的最短長度,還有要開 long long。 bool ok( const vi &L, const int K, int x ){ ll cnt = 0; for( int i = 0; i < L.size…

LHPC 2016 pA. 摺紙 ( Ad hoc )

因為沒有題目沒有名字,所以我決定給他亂取XDD 幸好 double 沒出問題。 void solve(){ double a, b; cin >> a >> b; int ans = 0; while( a > 1 ) ++ans, a /= 2; while( b > 1 ) ++ans, b /= 2; cout << ans << endl; }