--- image: https://i.imgur.com/k2bLWJT.png tags: 演算法競賽, FHC --- <style> .markdown-body { max-width: 88%; } </style> # Facebook / Meta Hacker Cup (FHC / MHC) > Last Update: Aug 26, 2022 官網:https://www.facebook.com/codingcompetitions/hacker-cup 雖然他名字裡有 Hacker,可是跟資安一點關係也沒有,是 ~~Facebook~~ Meta 辦的演算法競賽。 :::info 叫 Meta 感覺還是怪怪的,以下還是先用 FHC 當作簡稱ㄅ。 ::: ### 賽程 FHC 分為以下五個回合: 1. Qualification Round - 有 72 小時,你只要能 <b style="color:red">AC 其中一題</b>就可以進到 Round 1。 2. Round 1 - 有 24 小時,你只要<b style="color:red">分數達到標準</b>就可以進到 Round 2(標準會在賽前公布,通常是通過兩題就能夠晉級)。 3. Round 2 - 有 3 小時,<b style="color:red">前 500 名</b>可以進到 Round 3,而且如果你有<b style="color:blue">解出至少一題</b>且名次在<b style="color:blue">前 2000 名</b>就能拿到 T-shirt。 4. Round 3 - 有 3 小時,<b style="color:red">前 25 名</b>可以進到 Final Round,如果你的名次在<b style="color:blue">前 200 名</b>那衣服上還會有「Top 200」的徽章。 5. Final Round - **還不確定是線上或線下舉行**,有 4 小時,有 $[200, 20\,000]$ 美元的獎金。 ### 賽制 - 以下(圖 1)可以看到比賽的題目,每一題都有相應的配分,只要答對了就可以拿到該題的分數,且只有答對的題目才會計算罰時[^fhc-penalty]。有兩件事需要特別注意:按下 Submit 之後你只有<b style="color:orange"> 6 分鐘</b>的時間可以上傳 & 修改答案,以及<b style="color:orange">賽後才會檢查</b>你上傳的答案對不對(記分板會先當大家都是 AC)。請務必先檢查過上傳的檔案是不是你要的,畢竟$\small\overset{\text{FST}}{翻車}$的可能性很高。 - 你的排名會由分數(score)跟罰時(penalty)來決定,分數越高排名越前面,分數相同時則按罰時由小至大來決定排名。 - 值得注意的是,因為只有一次機會,所以罰時並不會因為你修改了上傳的檔案而額外增加(當然還是會以最後一次上傳的時間為準)。 [^fhc-penalty]: 罰時就是把所有有 AC 的題目的第一個 AC 的提交時間(比賽經過的時間)都加起來,如果在該次提交之前還有其他的非 CE 提交就再額外加一些時間。**在 FHC 裡你每題只會有至多一個 AC 的提交,且不會有額外的罰時。** :::spoiler 圖 1 -- 2020 年 Qualification Round 題目  ::: ### 做題流程 1. 先到[這裡](https://www.facebook.com/codingcompetitions/hacker-cup)按  註冊,從  進到比賽裡面。 2. 按照題目敘述寫完程式之後,按下  按鈕,會出現以下畫面(圖 2),之後按  拿到比 Sample Input 多一點點的 Validation Input,接著用你的程式跑出他的答案並丟到  欄位按下 ,如果跳出以下畫面(圖 3)就代表範例通過了! 3. 接著可以戳這顆咚咚 ,你會載下一份包含一個 .txt 的加密 .zip。 :::warning 到目前為止都還不會開始倒數計時,不過當你按下  之後,**你只有 6 分鐘**可以處理「解壓縮 > 執行程式 > 得到輸出檔 > 」四個步驟,而且**沒有第二次機會**可以按,所以請絕對先準備好再按下按鈕! ::: :::info 在按下  之後可以選擇去用密碼解壓縮檔案,但也可以直接下載一份沒有密碼保護的 .txt 輸入檔。 個人認為直接重新載一份會更快,若是你的網路燒雞才會需要去解壓縮。 - 可以參考:https://youtu.be/kibe-92kcjc ::: - 你需要上傳輸出檔(任何副檔名都可以)以及程式碼,檔名放什麼都可以,但盡量不要用英文以外的字元。 - 如果你的輸出檔格式不太對,你會得到 ,這時就趕緊檢查你剛剛是不是傳錯了檔案,或是 debug 的程式碼忘了註解掉,並重新上傳。 - 如果得到的結果是  那就代表說基本上沒事了,可以繼續下一題。 :::spoiler 圖 2 -- Validate Solution  ::: :::spoiler 圖 3 -- Submit  ::: ### 程式碼模板 使用 `freopen("輸入檔檔名", "r", stdin)` 以及 `freopen("輸出檔檔名", "w", stdout)` 來進行檔案的輸入輸出。如果是使用 cmd 的人可以直接在編譯出執行檔後打 `A.exe < 輸入檔檔名 > 輸出檔檔名` 就好。 ```cpp= #include <bits/stdc++.h> using namespace std; void solve() { /* todo */ int ans = 0; cout << ans << "\n"; } int main() { freopen("A.in", "r", stdin); freopen("A.out", "w", stdout); int T; cin >> T; for (int test = 1; test <= T; ++test) { cout << "Case #" << test << ": "; solve(); } return 0; } ``` ### 額外注意事項 - 常常會有圖論題讓你遞迴深度太深,本機會跑到 Runtime Error(實質上是 stack limit exceeded),這時候可以利用在編譯指令加上 `-Wl,--stack=268435456` 來解決這個問題(後面那串數字是給 stack 開的大小,單位是 byte,如果不夠可以再加上去)。 - maybe thiws cawn hewp uwu https://codeforces.com/blog/entry/95323 - 上傳 output 之後可以看一下你生出來的答案有沒有怪怪的(ex. 在答案 $\ge 0$ 的題目出現負數),可能可以抓到一些問題(ex. overflow) - `-fsanitize` 是你的好幫手(? - 可以試試 `#define _GLIBCXX_DEBUG 1`,他可能會幫你抓到一些邊界問題。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.