USACO Betsy s Tour 解題報告

2021-06-26 18:16:59 字數 1916 閱讀 9867

大神做了這道題:解釋得非常清楚,我也是按照這種方法做的,即統計「必經點」的個數,如果為0,則周圍點都要試一遍;否則,如果為1,則選擇這個必經點走;如果多餘1個,則無論選擇其中哪個,都會走向死胡同,所以不用再走了。只用這乙個優化就可以通過所有測試點,雖然很險。

user: chen chen [thestor1]

task: betsy

lang: c++

compiling...

compile: ok

executing...

test 1: test ok [0.003 secs, 3500 kb]

test 2: test ok [0.005 secs, 3500 kb]

test 3: test ok [0.005 secs, 3500 kb]

test 4: test ok [0.003 secs, 3500 kb]

test 5: test ok [0.003 secs, 3500 kb]

test 6: test ok [0.011 secs, 3500 kb]

test 7: test ok [0.969 secs, 3500 kb]

all tests ok.

your program ('betsy') produced all correct answers! this is your

submission #2 for this problem.congratulations!

網上和標準答案都是用的這個優化,只不過實現地更有效些,即用乙個陣列儲存每個點周圍的沒有訪問過的點的個數,並實時更新,這樣不必每步都重新計算。

大神提到了另外乙個優化,就是對那種「一分為二」的情況直接跳出。但我總覺得有點困惑,覺得需要判斷整行或整列的情況才能得到,所以沒有使用(當然,主要是測試點都過了)。

/* 

id: thestor1

lang: c++

task: betsy

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int dx = , dy = ;

// 88418

int cntfree(int r, int c, int n, std::vector> &visited)

nfree++;

} return nfree;

}void dfs(int r, int c, int n, std::vector> &visited, int &cnt, int nvisited)

return;

} visited[r][c] = true;

int nr, nc;

int naccesspoint = 0, accessr, accessc;

for (int d = 0; d < 4; ++d)

int nfree = cntfree(nr, nc, n, visited);

if (nfree == 1)

}// if more than 1 access points, then there will be dead end

if (naccesspoint == 0)

dfs(nr, nc, n, visited, cnt, nvisited + 1);

} }else if (naccesspoint == 1)

visited[r][c] = false;

}int main()

USACO Hamming Codes 解題報告

資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...

USACO Closed Fences 解題報告

幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...

Wiggle Subsequence解題報告

這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...