假如高考考編程。。。
今天分享一篇知乎上一個(gè)非常有意思的回答:假如高考考編程會(huì)怎樣?
轉(zhuǎn)載來源:知乎
鏈接:https://www.zhihu.com/question/50360847/answer/1894183447 作者:Super Mario
2046年的春天,編程全面納入高考的第四年, 河北某三線城市,星期五下午5點(diǎn)半。
王子明同學(xué)拿著手機(jī),一臉沮喪的走在街上,時(shí)不時(shí)的有電動(dòng)汽車和外賣機(jī)器人在他身邊駛過,偶爾天空中劃過幾架直升機(jī)。“都是有錢人,跟我不是一個(gè)世界的”。王子明想著,他經(jīng)過一家充電站,來到雜貨店,里面的美女機(jī)器人微笑著遞給他一瓶可口可樂,還有一塊口香糖,他拿起手機(jī)在美女的胸前一比劃,“總價(jià)30元,謝謝光臨,歡迎您下次再來。”機(jī)器人微笑著走了。“也就喝快樂水能讓我稍微快樂一點(diǎn)。“
王子明為什么不高興呢,因?yàn)橐荒3煽兂鰜砹耍某煽兎浅2焕硐耄渌颇窟€好,但是信息技術(shù)考砸了,150分的題目只拿到了85分,連及格線都沒過。
“高考為什么要考計(jì)算機(jī),為什么要考編程,我真羨慕我爸,他們高考根本不考算法!我真想回到10年代,那個(gè)時(shí)候我早就能上雙一流了。“王子明恨恨的說。
王子明的確不擅長編程,Dijkstra,KMP怎么背都背不過,BFS和DFS經(jīng)常寫錯(cuò)邊界條件,至于動(dòng)態(tài)規(guī)劃壓軸題,他就從來就沒做出來過。他也就只能靠前面那60分選擇題拿點(diǎn)分,選擇題考的都是計(jì)算機(jī)基礎(chǔ)知識(shí)和基本操作,不涉及編程。“現(xiàn)在是高度信息化社會(huì),計(jì)算機(jī)普及率99%,不會(huì)編程的人就是文盲!“ 他腦海里又浮現(xiàn)出計(jì)算機(jī)老師在課堂上的話。計(jì)算機(jī)老師是一個(gè)又高又瘦的中年婦女,非常嚴(yán)厲,他很怕她,每次走廊里見到她都繞著走。
王子明回到家里,只見家門口站著一個(gè)快遞機(jī)器人,正在給媽媽搬東西,“子明快點(diǎn),快幫我把這些菜放在冰箱里,肉放冷凍,菜放冷藏。”子明連忙過去幫忙。幫完忙,媽媽問道:“這次一模成績?cè)趺礃樱嗌倜。俊蓖踝用饔悬c(diǎn)支支吾吾,不愿意說。“20名?”媽媽臉色沉了下來,王子明搖了搖頭,“30名?”媽媽臉色更難看了。王子明斷斷續(xù)續(xù)說道:“4....2名”
"什么?!42名,你之前不都一直是前20的嗎,這次怎么回事?"
“我計(jì)算機(jī)沒考好,只有85分。”
“呵呵!天天都在家里打游戲,我就從來都沒看你主動(dòng)的刷過leetcode ! 你看隔壁那小崔,不僅刷leetcode,每天晚上還要打codeforces,打完還要補(bǔ)題,人家說了,我不把所有題目AC,就不睡覺。你呢,我就從來沒見你說過這個(gè)話。”
“我刷leetcode,昨天刷了8道呢。”
“別騙我了,你把別人的題解復(fù)制粘貼也叫刷題?騙誰呢,自己騙自己有意思嗎?高考能讓你看別人的題解?你要是真的刷了,好,你現(xiàn)在就給我打開你昨天刷的題,當(dāng)著我的面給我AC。AC不了,你就別吃飯!“
“媽媽我錯(cuò)了!“王子明快要哭出來了。
媽媽看到王子明這個(gè)樣子,也有點(diǎn)心軟,說道:“孩子,不是我逼你,我也希望你能高高興興的去玩耍,你現(xiàn)在還有三個(gè)月就要高考了,我們家沒錢,你爸爸天天在公司加班拼死拼活一年連100萬都掙不了,我們也不能讓你去國外讀書。你現(xiàn)在這個(gè)樣子,怎么考好大學(xué)?考不上好大學(xué),你就找不到好工作,找不到好工作,就沒有女孩子愿意嫁給你。現(xiàn)在中國每3個(gè)男人就得有一個(gè)在打光棍,你愿意做那三分之一嗎?“
“媽媽這些我都知道,但是編程太痛苦了,我討厭算法,什么dijkstra,什么二分圖,什么KMP,現(xiàn)實(shí)生活又用不到!“
“媽媽也知道你不喜歡,但是高考它就考啊,媽媽上學(xué)的時(shí)候也很討厭數(shù)學(xué),也要學(xué)一些根本用不到的圓錐曲線方程,三角函數(shù)什么的,你咬咬牙,背過它們,高考完就讓它們滾一邊去不就得了?“
“媽媽我......“
"別說了,要不我給你報(bào)個(gè)輔導(dǎo)班吧,計(jì)算機(jī)突擊輔導(dǎo)班,周日下午兩點(diǎn)去上課。"
“周日我要和小洋去踢球。“
“踢什么球!現(xiàn)在是踢球的時(shí)候嗎?高考完了你踢到天黑我也不管,現(xiàn)在不行!“

飯后,子明悶悶不樂的回到屋里,打開leetcode,開始完成今天老師布置的題目。說起leetcode,據(jù)王子明認(rèn)識(shí)的一個(gè)程序員爺爺說,這leetcode在他們年輕的時(shí)候就有了,當(dāng)時(shí)的目的是總結(jié)一些程序員算法面試的題目。后來因?yàn)楦鞔蠊径荚诿嬖囁惴ǎ琹eetcode越做越大,再后來,聽聞中國高考要考算法,leetcode立刻推出了中國高考專用版,把總部遷到了北京,迅速統(tǒng)治了中國計(jì)算機(jī)教育市場,甚至還高價(jià)收購了《五年高考,三年模擬》,進(jìn)軍其他學(xué)科。目前是全國的中學(xué)生都在刷leetcode,老師們也在上面布置作業(yè)。
另外,每周的周賽也是全國乃至全球的一場盛會(huì),幾十萬名用戶在上面比賽,小明他們學(xué)校有個(gè)學(xué)長因?yàn)槟炒沃苜惸昧巳虻?,被大家稱為“七神”,全校聞名。
......
子明還在刷題,Wrong answer,Wrong answer,數(shù)不清的Wrong answer.......好不容易解決了這個(gè)wrong answer,又在下一個(gè)test case掛了,好不容易把這幾個(gè)出錯(cuò)的case都解決,結(jié)果又變成了Time limit exceeded。“為什么就不能出現(xiàn)Accepted這個(gè)詞?很難嗎?”子明怒吼道。
當(dāng)子明東拼西湊把最后一道題AC,已經(jīng)凌晨三點(diǎn)了,他發(fā)現(xiàn)桌子旁邊有一杯奶,不知道是什么時(shí)候媽媽給送過來的。奶旁邊還有一張面膜和一個(gè)字條,字條寫著:“喝完奶早點(diǎn)睡覺,不管你考多少名,你都是媽媽最愛的子明。”
子明躺在床上睡的很香,夢里他變成了一個(gè)天才,所有的算法題,只要他隨便寫點(diǎn),交上去就通過。不知不覺就到了上午10點(diǎn),他猛的一下子起來:“糟了,今天還要去補(bǔ)課呢,都遲到兩個(gè)小時(shí)了。”這時(shí)候媽媽進(jìn)來:“孩子不用補(bǔ)了,媽媽已經(jīng)替你請(qǐng)假了。你昨晚睡的太晚,要好好休息一下。“
“謝謝媽媽!“子明松了一口氣。
“你現(xiàn)在就是要全心全力把算法搞好,其他科目都可以放放,我昨天剛給你報(bào)了那個(gè)計(jì)算機(jī)輔導(dǎo)班,最后一個(gè)名額呢,被我搶到了。輔導(dǎo)班的楊老師非常厲害,而且很擅長一對(duì)一輔導(dǎo)。“
“哦!“
“那個(gè)輔導(dǎo)班的老師要求你這幾天打一場編程比賽,然后把你的比賽記錄以及代碼發(fā)給他,他幫你分析一下。一會(huì)10點(diǎn)半是leetcode周賽,你吃完早飯去打一下。能進(jìn)前1萬名我請(qǐng)你吃火鍋。“
“好的!“
然而子明并沒有進(jìn)前1萬,甚至連前10萬都沒進(jìn),他只做出了一道easy難度的簽到題。望著滿眼的紅色wrong answer,他非常沮喪。有一道BFS的題明明會(huì)做,但就是不對(duì),也不知道錯(cuò)在哪里。畢竟,為了提升自己比賽成績的含金量,防止有人hard code,leetcode平臺(tái)這幾年在比賽的時(shí)候不再告訴選手具體哪個(gè)test case錯(cuò)了,只會(huì)告訴錯(cuò)誤類型。
媽媽看在眼里,也沒說什么,去臥室給那個(gè)輔導(dǎo)老師打電話,“我們家子明可能讓您費(fèi)心了,他在編程方面完全不開竅。”他聽到媽媽的聲音,電話那邊則是 “沒問題沒問題,這樣的學(xué)生我見多了,你家孩子算不錯(cuò)的了,起碼還做出來一道,沒有我教不好的學(xué)生。”
周日的下午,他跟媽媽去了輔導(dǎo)班,進(jìn)了教室,輔導(dǎo)老師正在給大家演示匈牙利算法的實(shí)現(xiàn)過程。“我們現(xiàn)在是月老,撮合的越多越好......" 子明聽著聽著,發(fā)現(xiàn)這個(gè)老師真的不一般,匈牙利算法講的栩栩如生,要知道他學(xué)校的老師只會(huì)念ppt,而且ppt做的還不咋地,但這個(gè)老師講完,他聽懂了,而且有種想找一道題練練手的沖動(dòng)。
“媽媽這個(gè)老師講的真好!”媽媽說道:“那是必須的,這個(gè)老師可是知名教練,大學(xué)時(shí)候是ICPC全國金牌,我們小區(qū)那個(gè)全市冠軍吳剛就是他教出來的。衡水中學(xué)開了1200萬年薪挖他,他不去。要不是媽媽凌晨一點(diǎn)守在電腦前搶課,根本搶不到呢。
”下課他和媽媽來辦公室找到老師,發(fā)現(xiàn)老師已經(jīng)拿著一堆紙?jiān)诘戎W用饕豢矗撬麉⒓颖荣愄峤坏乃写a,老師已經(jīng)打印出來了,上面有不少勾圈,顯然是認(rèn)真讀過。老師第一句話就是:“這個(gè)比賽題目做不出來沒關(guān)系,賽后分析才是關(guān)鍵。我看了你比賽的代碼,比我想象的要好,你如果注意一下細(xì)節(jié),這次比賽你就不是一題,而是三題了。
”這句話讓子明不敢相信:“三題,要是三題的話我就是前1萬名了。“
"你還記得你第二題死活都做不對(duì),一直都是wrong answer嗎?"
“是的“
“你把第37行i和j兩個(gè)變量調(diào)過來試試看。
“子明拿出自己的電腦,一調(diào)換,提交,發(fā)現(xiàn)直接變成漂亮的Accepted了。
“哈哈,看來這道題我還是會(huì)做的,這就是低級(jí)錯(cuò)誤“
老師一臉嚴(yán)肅:“住嘴,什么低級(jí)錯(cuò)誤,低級(jí)錯(cuò)誤也是錯(cuò)誤!高考犯低級(jí)錯(cuò)誤,照樣沒有分?jǐn)?shù)。”
子明沉默了,老師繼續(xù)說道:“你的代碼命名非常不規(guī)范,i,j,k橫行,而且整體局部不分,前面剛給一個(gè)全局變量賦值為 i,后面又把 i 賦值給另一個(gè)局部變量。這樣的話很容易出錯(cuò)。“
“可是老師,我每一行都仔細(xì)檢查的,出錯(cuò)的概率很低的。“
“那好,假設(shè)你每行出錯(cuò)的概率是1%,很低了嗎,那30行出錯(cuò)的概率是多少?“
“26%。“子明拿出手機(jī)快速計(jì)算了一下。“
對(duì)啊,你每個(gè)程序?qū)?0行,就有26%的概率出錯(cuò),100分就變成74分了。你高考丟26分,足以讓你跟重點(diǎn)大學(xué)失之交臂。馬虎是不可避免的,你如果能把出錯(cuò)率降到0.1%,那一道題出錯(cuò)的概率就是3%,你就能提高23分,如果你能把你的代碼寫規(guī)范,那足以降到0.1%。注意,所有的馬虎都是有因可循,一定要找深層原因,而不是把它僅僅歸結(jié)于馬虎!
“子明默不作聲,這些他老師從來都沒跟他說過,老師只會(huì)說:“馬虎啊,那下次注意不要馬虎不就行了嗎?”但他還是會(huì)馬虎
“代碼規(guī)范真的很重要,你知道衡水中學(xué)的學(xué)生怎么練的嗎?他們?nèi)懘a用的都是一個(gè)規(guī)范,學(xué)校自己搞了一個(gè)做題系統(tǒng),學(xué)生們?cè)谶@個(gè)系統(tǒng)上做題的時(shí)候,如果代碼不符合規(guī)范,會(huì)被直接判錯(cuò),就算是寫對(duì)了也沒用,因此所有學(xué)生寫的代碼都一個(gè)樣子。當(dāng)然我不能要求你這樣,但是你一定要留心。
“楊老師喝了一口水,又看了一下子明的代碼,繼續(xù)說道:“然后第三題,我看你已經(jīng)判斷出這道題需要用dijkstra算法了,但是你為什么只寫了一個(gè)def dijkstra然后就沒了?“
“我忘了怎么寫了。“
“這個(gè)方法其實(shí)不難記的,就是建造一個(gè)堆,然后每次把權(quán)重最小的邊抽出來更新,我有一個(gè)專門講這個(gè)方法的視頻,你把接收器給我,我傳給你,你回去好好看看,里面有專門的口訣。“
“好的,謝謝老師!“
“你這兩道題都是經(jīng)過努力可以做出來的,只要做出來,你的成績就會(huì)有飛躍。這些是我一些輔導(dǎo)材料,你回去好好研究一下,以后每周要來定時(shí)上課哦。“
子明說完,他媽媽馬上跟老師說:“楊老師你看,能不能給我孩子單獨(dú)開個(gè)小灶啊。”“可以,不過這個(gè)是另收錢的,每小時(shí)5000。““沒問題,這個(gè)老師您看您什么時(shí)候有時(shí)間啊。”“這是我的日程表,子明你來看一下,從這個(gè)白色區(qū)域選兩個(gè)小時(shí)”.......
回家的路上,子明埋怨媽媽:“媽你這是干什么啊,花這么多錢,兩個(gè)小時(shí)都頂我一個(gè)月生活費(fèi)了,咱家又沒那么多錢。”“再窮也不能窮教育啊,你考上好大學(xué),能給我省好幾千萬呢,再說你打網(wǎng)游充的錢也有好幾萬了,你少充點(diǎn)不就補(bǔ)回來了?”
子明不說話,回去之后開始拿出老師給的資料慢慢看,媽媽則在廚房忙活,給兒子做他最愛吃的紅燒牛肉。爸爸每天在公司加班,平時(shí)就很晚回家,最近為了不影響兒子備戰(zhàn)高考,干脆就住在公司了。“兒子,考上雙一流,爸爸帶你去你最想去的環(huán)球影城。”爸爸和兒子視頻聊天,“爸爸,我們班明明她爸爸要帶她去月球呢。”“去月球要20億呢,我一輩子也掙不到這個(gè)數(shù)啊。”“爸爸我開玩笑呢,明明她爸爸是大公司老總,咱家能跟她家比嘛。”“哈哈哈哈,嚇?biāo)腊职至耍〉饶阌辛顺鱿ⅲ€想讓你帶我去呢。”......
過了一周,子明準(zhǔn)時(shí)出現(xiàn)在楊老師家里。楊老師很熱情招待了他,然后對(duì)他進(jìn)行了輔導(dǎo)。
“這個(gè)信息技術(shù)高考在我上學(xué)的時(shí)候并沒有,是10年前剛剛加上的。一開始滿分是100,而且只在部分發(fā)達(dá)省份考,后來因?yàn)槿丝诶淆g化加劇,青年信息人才越來越緊缺,2043年開始上升到了150分,并推廣到了全國,統(tǒng)一上機(jī)考試,時(shí)間兩個(gè)半小時(shí)。
首先是60分的選擇題,這個(gè)考的就是計(jì)算機(jī)基礎(chǔ)知識(shí),什么windows操作啊,什么進(jìn)制轉(zhuǎn)換呢,我相信你應(yīng)該沒什么問題,這些題目一定要快,必須1分鐘就要一道,30分鐘內(nèi)解決戰(zhàn)斗。然后就是6道編程題了,每道15分。
但是高考和比賽的區(qū)別是,高考在中間不會(huì)告訴你做的對(duì)不對(duì),只有考試結(jié)束之后才會(huì)判分,所以你120分鐘做完,和150分鐘做完,結(jié)果是一樣的。這就要求你必須非常仔細(xì),一遍就要做對(duì)。不要指望著讓OJ幫你調(diào)BUG。不過呢,就算你寫的不對(duì)也沒關(guān)系,test case和test case之間是相互獨(dú)立的,你通過了這個(gè)test case就給這個(gè)分,全通過了就是滿分。
另外,高考是不限語言的,但是所有語言的time limit都一樣,你用python當(dāng)然OK,因?yàn)檫\(yùn)算時(shí)間很充裕,復(fù)雜度只要正確就行,但是呢,如果你用C++可能會(huì)有額外的好處,衡水中學(xué)在入學(xué)時(shí)就強(qiáng)制所有學(xué)生都用C++。我記得2044年上海的題目,出題者本來是想要大家用O(n log n)算法的,但是限時(shí)給的太長了,如果你用C++再加上一些優(yōu)化,O(n^2)也能拿滿分,最后好多人暴力過了。判卷組本來想縮短時(shí)限重判的,結(jié)果因?yàn)榇蠹乙呀?jīng)知道自己成績,社會(huì)反對(duì)聲浪太大,只好作罷,你看,用c++白撿了10分,還省了大量時(shí)間。所以如果你現(xiàn)在上高二,我會(huì)建議你改C++,但是你是高三,所以你可以選擇不改。
前兩道題,就是一些數(shù)組,字符串的題目,考察最基本的前綴,后綴,二分,雙指針,哈希表之類的,這些題目,是送分題,一分都不能丟的,而且要10分鐘一道。
中間兩道題,一般是二維數(shù)組或者圖之類的,需要用到各種搜索,BFS,DFS,或者一些圖論基礎(chǔ)知識(shí),比如union find,dijkstra之類的,這些題目,如果你想要上雙一流,也是必須要拿下的,要做到20分鐘一道。
最后兩道題要花一個(gè)小時(shí)完成,第五題容易出奇葩的題目,或者是幾個(gè)知識(shí)點(diǎn)綜合起來的綜合題,或者需要用到線段樹進(jìn)行優(yōu)化,甚至可能會(huì)出幾何和數(shù)論。而第六題,就是臭名昭著的動(dòng)態(tài)規(guī)劃了。這兩道題,以你目前的水平,是拿不下的,但是你可以從里面搶分,千萬不要空著。注意,你哪怕用最暴力的方法,也能拿到大約1/3的分?jǐn)?shù),前面如果再不扣分。你就有130了,足夠你上雙一流的。不過你要是想上清北華五,那就要至少140分,也就是選擇題全對(duì),然后最多有一道題只會(huì)做small test case,剩下的都要滿分。
而且,動(dòng)態(tài)規(guī)劃,千萬不要畏懼,雖然千變?nèi)f化,其實(shí)也可以分成幾大類的,背包問題,樹形DP,博弈論.....你現(xiàn)在水平不高,你只要記住,動(dòng)態(tài)規(guī)劃,就是記憶化的遞歸,你只要往這方面想,絕大部分題目你都是可以解決的,至少可以拿到大部分分?jǐn)?shù)。
雖然題型分布一般是這樣,但是高考也有不按套路出牌的時(shí)候,比如去年最后一題是貪心+最小堆,而動(dòng)態(tài)規(guī)劃放到了第三題的位置,難倒了一大片,還有我記得前年某個(gè)省,最后一題是概率題,需要用到排列組合,而排列組合需要存儲(chǔ)中間結(jié)果,取模需要用到數(shù)論知識(shí),否則大數(shù)據(jù)會(huì)超時(shí)...... 雖然中國剩余定理還有歐拉定理什么的是超綱的,會(huì)在考試的時(shí)候給你寫出來,但是掌握了沒虧吃,畢竟時(shí)間是最寶貴的.....
最后想說,學(xué)習(xí)算法,最關(guān)鍵的還是多練習(xí),尤其是練習(xí)自己的薄弱環(huán)節(jié),刷自己的強(qiáng)項(xiàng)題固然很爽,但是沒什么效果。衡水中學(xué)的學(xué)生,三年下來要做好幾千道題,他們每周要搞兩次編程比賽,全校大排名,每個(gè)班的最高名次和平均名次都會(huì)算到教師績效里。而且,他們搞出來的那個(gè)系統(tǒng),不僅強(qiáng)制學(xué)生把代碼寫規(guī)范,還能通過每個(gè)學(xué)生的答題情況來分析他們的弱點(diǎn),專門給每個(gè)學(xué)生出他們大概率做錯(cuò)的題目,比如一個(gè)學(xué)生binary search已經(jīng)爐火純青,但是DFS經(jīng)常寫錯(cuò),那么系統(tǒng)就會(huì)大概率給他出DFS相關(guān)題目,很少出binary search。要不說那邊學(xué)生平時(shí)用那個(gè)系統(tǒng)做題非常痛苦,但最后高考成績都很高呢!雖然這些他們老師在課上也說過,但是子明還是聽的津津有味。后來老師又給他輔導(dǎo)了幾道錯(cuò)題,擴(kuò)展了很多知識(shí)點(diǎn),兩個(gè)小時(shí)很快過去了,老師把把子明送走,說:“現(xiàn)在努力絕對(duì)來得及,千萬不要對(duì)自己失去信心!只要聽我的,把我給你布置的題目刷透,你高考上130沒問題。”
在回家的路上,子明充滿了斗志,說道:“不就是區(qū)區(qū)算法嘛,有什么好怕的,來啊高考!看我6月把你打的落花流水!”
這個(gè)時(shí)候子明的手機(jī)響了,是他的朋友小洋:“小明啊,下周日上午我們一起踢球怎么樣,咱們初中同學(xué)長庚也加入呢。”
子明又有點(diǎn)心癢癢了,想偷偷去,不告訴媽媽,后來覺得有點(diǎn)不好,就在電話里跟媽媽說了,沒想到媽媽爽快答應(yīng)了“你既然跟我說了,說明你現(xiàn)在還是知道分寸的,踢球沒什么不好,可以放松你的大腦,你這次可以去,但是你要用一次周賽前1萬名的成績來回報(bào)我。”“好!”子明高興的說道。
夕陽下,一個(gè)少年堅(jiān)定地前行著。
-End-
最近有一些小伙伴,讓我?guī)兔φ乙恍?nbsp;面試題 資料,于是我翻遍了收藏的 5T 資料后,匯總整理出來,可以說是程序員面試必備!所有資料都整理到網(wǎng)盤了,歡迎下載!

面試題】即可獲取
