leetcode 的 submission 是收到 IO 速度的影響的……對(duì)垫毙,沒錯(cuò)霹疫,盡管和其他 OJ 網(wǎng)站不同, leetcode 給你提供了完備的代碼級(jí)的接口露久,它的測(cè)試?yán)耘f是通過 IO 來(lái)讀取的更米,真是讓人桑心。
明白這一點(diǎn)是因?yàn)楹梁郏以诓榭茨车李}目的最快解時(shí)征峦,發(fā)現(xiàn)了這么一段代碼。平心而論消请,他的代碼并不比我的復(fù)雜度要簡(jiǎn)化多少栏笆,然而卻比我快10倍以上,我本來(lái)百思不得其解臊泰,直到我發(fā)現(xiàn)了這么一段代碼:
static int dividend=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();
這段代碼利用 lambda 表達(dá)式完成了在全局作用于定義并且立即執(zhí)行蛉加,而其所做的無(wú)非也就是兩件事:
- 用
sync_with_stdio
接口,關(guān)閉std::cin
和std::cout
與scanf
和printf
的同步,減少了相當(dāng)?shù)?IO 開銷针饥。 - 用
cin.tie
接口厂抽,完成了cin
和cout
的解耦,減少了大量 flush 調(diào)用丁眼。
由此大大提升了 IO 效率筷凤,給 submission 一個(gè)更漂亮的速度。
然而就算這樣苞七,我的提交還是遠(yuǎn)遠(yuǎn)比別人慢藐守。
大概這就是人生吧。