競賽心法

鄭允臻

AGAIN?

不會又要講同樣的東西了吧?

YES... AND NO

我像是那麼物盡其用的人嗎?

FOR TODAY

什麼是演算法競賽?

有哪些比賽?

有哪些資源

1

競賽導論

怎麼抱佛腳?

2

能力競賽

先不告訴你們這個要講啥

3

WIN-WIN PROBLEM

競賽導論

什麼是演算法競賽? 有哪些比賽?

有哪些資源?

The resources

Blogs & websites

特色比較詳見hhhhaura's競賽心法PPT

  • CSES 經典題練習
  • Codeforces 練習思考+猜梗
  • CSAcademy 經典梗
  • TCIRC 有AP325 的題目

Online judge

有哪些比賽?

The contests

  • 校內能競 & 北市賽 & 全國賽
  • TOI 初選 & 一階 & 二階 & 三階
  • HP codewars
  • Google codejam
  • Facebook Hackercup
  • 全國賽模擬賽

個人賽們

  • YTP少年圖靈計畫
  • NPSC 網際網路全國程式設計大賽
  • ISSC 青年程式設計競賽
  • HP codewars

團體賽們

  • 資訊之芽
  • IOICamp

記得報名!

歡迎跟我討論個人化的練習方法

能力競賽

怎麼抱佛腳?

WARNING

以下內容非「練習方法」

而是「應考方法」

STEP 1

準備工作

  • 演算法列表
    
    • 平時就可以整理
    • 確保你正確得刻的出來
    • 確實了解原理跟複雜度
  • 比賽模板(Optional)
    
    • #include
    • #define
    • 難背的東東(PBDS)

What do I have to prepare ?

STEP 2

放鬆心情:不要在考試前一天寫需要思考的題目

STEP 3

賽中:3小時多題的比賽

以下括號中都是我的個人習慣

  • 看題目(15 ~ 20 分鐘)
    • 評估會做的分數(略想)
    • 排序難度(盡量先做有把握的)
  • 做題
    • 想好再開始實做
    • 細節不馬虎
    • 多用function包起來

Strategy

實做範例

#include <bits/stdc++.h>
using namespace std;

#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define all(x) begin(x),end(x)
#define sz(x) (int) (x).size()
typedef long long int ll;
typedef pair<int, int> pii;

vector<int> a;
void init_(int n) {}
bool check_(int a, int b) {}
int calc(int a, int b) {}
void solve() {
	int n; cin >> n;
	init_(n);
	rep(i, 0, n) cin >> a[i];

	int ans = 0;
	rep(i, 0, n) rep(j, i + 1, n) {
		if(check(i, j)) ans += calc(a[i], a[j]);
	}
	cout << ans << "\n";
	return ;
}
int main() {
	int t; cin >> t;
	while(t--) solve();
}
  • Debug
    • 檢查typo、overflow
    • 檢查時間&空間複雜度
    • 錯超過3次 \( \rightarrow\)  請果斷換題

Strategy

  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!
  • 不要讓自己卡在同一個狀態太久!

Strategy

STEP 4

賽後檢討

問問題的藝術

問問題,WIN-WIN題也。

為什麼他要免費幫我阿?

Why the HELL would one help us for free?

  • 成就感
  • 使命感
  • 教學相長
  • 覺得學妹可愛
  • 對學妹有興趣

 

Why the HELL would one help us for free?

IN SHORT

當花費的「邊際心力」小於等於「邊際快樂」

大家都很樂意幫忙

不是每個人都超有使命感

所以我們要學習怎麼有效率的問問題

給被問問題的人最佳遊戲體驗

小呆有一天遇到了一道他不會的題目。

他認為他只要學會最短路徑演算法就能解這題

於是他跑去問小瓜

小瓜花很多時間教了他Dijkstra和Floyd

小呆開心的回去做這題

結果過不了

傷心的回來又要找小瓜

SEA TURTLE SOUP

What happened?

其中可能出了什麼差錯

解題關鍵根本不是最短路徑演算法...

  1. 有人想解決問題X
  2. 他覺得Y可能是解決X問題的方法
  3. 但是他不知道Y應該怎麼做
  4. 於是他去問別人Y應該怎麼做?

在根本錯誤的方向上浪費他人和自己大量的時間和精力!

THE X-Y PROBLEM

Solution

我們可以提供更完整的問題背景資訊

小瓜經歷了「X-Y問題」之後

十分害怕自以為是會讓事情變更麻煩

於是某次他遇到卡題的時候

就直接傳題目連結跟小瓜說

我不會這題 可以教我嗎?

結果小瓜說

我現在在忙 晚點幫你看看

然後就沒有然後了?

GUA's SECOND ATTEMPT

要從讀題目開始 好累

心有餘而力不足阿...

要怎麼問問題才不NG?

  • 提供易讀、完整的問題背景
  • 你目前的想法跟嘗試
  • 你認為你可能需要的幫助
  • 問他容易回答的問題(Experience)
    • 你是怎麼思考這題
    • 在遇到某情況時...通常有哪些可能

WIN-WIN PRINCIPLES

MANNERS MATTER

千萬別忘啦!

小瓜早安!

我今天在寫TIOJ9876(link)

題目的簡短敘述是:blablabla

測資範圍:blablabla

我試過了blablabla,但是發現會blablabla

我實在想不到可以怎麼辦了

請問您可以給我一點提示或方向嗎?

非常謝謝您的幫忙!


 

 

 

EXAMPLE -- Kattee

  • 提供完整背景 容易找出盲點
  • 讓對方知道自己已經盡力 需要協助
  • 不請對方「教」自己 而是索取提示
  • 不破壞解題樂趣 雙方好心情!

Exeptional !

描述問題也幫助自己釐清

培養描述事情的能力

常常莫名其妙就沒問題了XD

  • 他說「blablabla」是blablabla的意思嗎?
  • 這個部份好難理解,小瓜是怎麼思考的呢?
  • 為什麼是blablabla呀,如果是這樣,會不會blablabla呢?

總之,要讓被問的人感受到,你已經嘗試過問谷歌大神但是還是得不到解答所以需要幫忙!

Example -- more

Reminders

1

不要怕問笨問題

但要問清楚的問題

2

 

懷著感恩的心!

記得感謝每一個幫助過你的人

3

盡量自己練習Debug!

但是可以提供自己的code

問有哪些可以嘗試的方向

祝大家都能創造雙贏局面!

Wish you a win-win situation

Thank You!

Questions?

Made with Slides.com