5/31
講師:吳崇維(wayne)
註冊 codeforce 以及 寫幾題熱身
一個國外的程式解題網站
有非常大量的題目資源
從十分簡單到
全世界只有2個人解的出來的都有
全網站都是英文,需要一點時間熟悉
以後練習題目主要都會在這個平台。
另外這網站有一個 ranking 機制
打一個線上的比賽可以加減積分
鍛鍊自己以及確認自己實力的好方法
不過時間大多在台灣時間的半夜。
先註冊一個帳號,並且寫兩題最多人
寫過的題目 : watermelon
https://codeforces.com/problemset/problem/4/A
https://codeforces.com/problemset/problem/1/A
對於一個固定形式的問題,
產生一套流程->
對於任何的輸入組合
皆能產生預期的答案!
推薦閱讀:)
想一想:如果一行程式跑1單位時間
這個for跑了~?
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
想一想:如果一行程式跑1單位時間
那麼這個for跑了~?
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
想一想:如果一行程式跑1單位時間
還有這個for跑了~?
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
跑了10000次,是固定次數
又稱常數時間
跑了N次,隨著N變大次數變多
又稱線性時間
跑了N平方次隨著N變大次數變多,且增多的很快
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
跑了10000次,是固定次數
又稱常數時間
跑了N次,隨著N變大次數變多
又稱線性時間
跑了N平方次隨著N變大次數變多,且增多的很快
如果今天輸入量 N = 10000
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
跑了10000次,是固定次數
又稱常數時間
跑了N次,隨著N變大次數變多
又稱線性時間
跑了N平方次隨著N變大次數變多,且增多的很快
如果今天輸入量 N = 10000
哪些跑得過,哪些跑不過呢?
Brute Force (暴力搜尋法)
顧名思義,就是什麼都不管,時間複雜度什麼的都不重要,把最直接的想法雜進去就好,
把所有的可能都搜尋過一遍!
現實例子:暴力密碼搜索。
什麼時候可以用暴力搜尋呢?
1. 想法簡單容易實現
2. 時限上十分寬鬆
3. 輸入量級十分小
其中輸入量級是最重要的參考
假設 N = 100 ,則 n^4 (n的4次方)
這樣的恐怖時間複雜度都可以在一秒內跑完
https://codeforces.com/problemset/problem/271/A
思路 & Hint
若他給你 y 年,那可以從 y+1年開始列舉
也就是說,檢查y+1, y+2, ..., 直到檢查到符合題意的年份。
找到後輸出年份,終止程式!
https://codeforces.com/problemset/problem/122/A
思路 & Hint
試著將所有的包含有 4,7 並在範圍內的數字直接列舉出來
接著逐個檢查。
一起努力快樂寫程式吧!