USACO Letter Game 解題報告

2021-06-23 02:44:06 字數 1411 閱讀 1487

這道題比較簡單,雖然我還是用了很久(多半天)。我沒有看到每個word至少含有3個字元這個條件,所以應該多測試了些無用的情況。但是考慮到答案用的是窮舉,所以很快(指程式執行時間)過了也沒什麼奇怪的。這裡用字典建了乙個trie,然後遍歷各種可能,剪掉在trie中查不到的。考慮到乙個單詞形成過程中會被我在trie中反覆查,如果我比窮舉的方法慢的話也不足為奇。

/*id: thestor1

lang: c++

task: lgame

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

struct trie

completed = 0;

}};void insert(trie *trie, string str)

trie = trie->next[str[i] - 'a'];

if (trie->completed == 0)

}trie->completed = 2;

}int search(trie *trie, string str)

trie = trie->next[str[i] - 'a'];

} return trie->completed;

}trie *trie;

std::vectorvalues(26, 0);

bool byvalues(const char &c1, const char &c2)

void update(string word, bool hasone, string before, int score, int &maxscore, map&candidates)

if (score == maxscore)

}else

}}void lettergame(string letters, std::vectorvisited, string word, bool hasone, string before, int score, int &maxscore, map&candidates)

for (int i = 0; i < visited.size(); ++i)

score -= values[letters[i] - 'a'];

word = word.substr(0, word.size() - 1);

visited[i] = false; }}

int main() }

// sort(words.begin(), words.end());

// for (int i = 0; i < words.size(); ++i)

// {

// fout<

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 ...