這道題比較簡單,雖然我還是用了很久(多半天)。我沒有看到每個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 ...