計(jì)算機(jī)系保研夏令營(yíng)機(jī)試攻略篇01——北大叉院機(jī)試

大家好,我是南開(kāi)大學(xué)14級(jí)軟件學(xué)院的本科生,2017年有幸先后參加到了北京大學(xué)前沿交叉學(xué)院和清華大學(xué)計(jì)算機(jī)系的夏令營(yíng)。總所周知,夏令營(yíng)都會(huì)有機(jī)試這個(gè)流程,很多同學(xué)因?yàn)闆](méi)有acm,ccfcsp相關(guān)經(jīng)歷,對(duì)機(jī)試的準(zhǔn)備和考試過(guò)程中的注意事項(xiàng)不太了解,在此我以我的經(jīng)歷,為大家做一些該方面的介紹。

首先我先給出2017年北京大學(xué)交叉學(xué)院的考試題目,共10道題目,時(shí)限三個(gè)小時(shí),ACM賽制(賽制等問(wèn)題下文我會(huì)講到),題目基本按照難度遞增排序,其中中文題目6道,英文題目四道:

我先簡(jiǎn)單概括下10道題目,如果有描述不清楚的地方,也請(qǐng)其他同學(xué)指出,也可以直接去百煉查看原題http://www.bailian.openjudge.cn/dsj2017xly/

1.點(diǎn)排序

給出平面上n(n<=1000)個(gè)點(diǎn)和一個(gè)目標(biāo)點(diǎn),先要分別求得n個(gè)點(diǎn)到目標(biāo)點(diǎn)的距離(歐式距離),然后按照n個(gè)距離作為第一關(guān)鍵字,n個(gè)點(diǎn)的x軸坐標(biāo)作為第二關(guān)鍵字,n個(gè)點(diǎn)的y軸坐標(biāo)作為第三關(guān)鍵字。給出n個(gè)點(diǎn)的排序結(jié)果。

2.單詞倒排

讀入一行英文,英文中只包含字母和空格,單詞間以單個(gè)空格分隔,將所有單詞的順序倒排并輸出,依然以單個(gè)空格分隔。

如輸入:I am a student則要求輸出:student a am I

3.生存游戲

給出一個(gè)n*m(n,m<=300)的元胞自動(dòng)機(jī),可以簡(jiǎn)單理解為一個(gè)n*m的矩陣,里面各個(gè)元素的值為0或者1,0表示死亡,1表示存活,然后對(duì)于每個(gè)細(xì)胞(元素),通過(guò)他的8個(gè)鄰居(周圍8個(gè)元素)的狀態(tài)來(lái)判斷下一秒時(shí)它的狀態(tài)(具體看題設(shè)),要求給出下一秒的狀態(tài)。

4.特殊密碼鎖

有一個(gè)一維由0/1組成的密碼鎖,長(zhǎng)度為n(n<30),每次按動(dòng)會(huì)翻動(dòng)自己和前后共三個(gè)鎖,給出一個(gè)初始狀態(tài)和一個(gè)終止?fàn)顟B(tài),問(wèn)至少翻動(dòng)多少次可以從初始狀態(tài)達(dá)到終止?fàn)顟B(tài)。

5.開(kāi)餐館

有n(n<=1000)個(gè)餐館,離散在一維數(shù)軸上,每個(gè)餐館有一個(gè)位置(即是數(shù)軸上的一個(gè)點(diǎn))和一個(gè)利潤(rùn)值表示在此地開(kāi)餐館可以獲得的利潤(rùn),你可以選擇任意個(gè)上述位置用來(lái)開(kāi)餐館,但是任意兩個(gè)餐館的距離必須大于k,問(wèn)最大的利潤(rùn)是多少

6.Meteor Shower

一個(gè)人在一個(gè)二維坐標(biāo)系的原點(diǎn),他得到了M(M<1e5)條信息,每個(gè)信息告訴他在t (t<1000)時(shí)刻,有一顆流星會(huì)降落在(x,y)點(diǎn)上(x,y < 300)。

流星降落時(shí)會(huì)毀壞當(dāng)前點(diǎn)和上下左右共五個(gè)點(diǎn),使得他們不能到達(dá),該人每個(gè)時(shí)刻可以選擇向上下左右移動(dòng)一格,問(wèn)該人達(dá)到安全區(qū)域的最短時(shí)間是多少?(安全區(qū)域即是一個(gè)不可能被任何流星擊中的點(diǎn)的集合)。

7.雙隊(duì)列

有一個(gè)系統(tǒng),我們對(duì)這個(gè)系統(tǒng)執(zhí)行q個(gè)任務(wù),每次可能包括:

? ?1.讓一個(gè)優(yōu)先級(jí)為p的客戶k進(jìn)入(p<1e7,k<1e6)

? ?2.找到當(dāng)前系統(tǒng)中優(yōu)先級(jí)最高的人離開(kāi)系統(tǒng),并輸出他的id

? ?3.找到當(dāng)前系統(tǒng)中優(yōu)先級(jí)最低的人離開(kāi)系統(tǒng),并輸出他的id

注意的是,一個(gè)客戶可能會(huì)被添加多次,每次的優(yōu)先度可能不同。

8.Silver Cow Party

給出一個(gè)有向圖,有n個(gè)人分別在1,2..n節(jié)點(diǎn)上,現(xiàn)在他們都要前往s節(jié)點(diǎn),然后再?gòu)膕節(jié)點(diǎn)返回,假設(shè)他們都很聰明,都會(huì)選擇最短的路線,那么請(qǐng)問(wèn)他們中路程最長(zhǎng)的人走了多遠(yuǎn)(n<1000),保證各個(gè)點(diǎn)一定可以到達(dá)s,以及s一定可以到達(dá)各個(gè)點(diǎn)。

9.The Balance

給定兩種砝碼質(zhì)量為a,b,要求你使用這兩種砝碼稱量出質(zhì)量為k的物品,要求使用砝碼數(shù)量的總數(shù)最小,問(wèn)最小數(shù)量。(a,b<1e4 k<5e4 且保證a!=b)

10.Computer Basketball Game

等待zjz大神寫(xiě)

大家可以先思考下,更建議要參加夏令營(yíng)的同學(xué)可以實(shí)際模擬做做(大部分的題目都可以在poj中找到),在做后再看下文給出的題解:


下面我簡(jiǎn)要給出10個(gè)題目的題解,由于篇幅有限,設(shè)計(jì)到一些基礎(chǔ)的算法,我只能給出對(duì)應(yīng)的名字,大家如果不熟悉可以自己百度學(xué)習(xí)下~首先感謝BUAA的zlf大神,NKU的zjz大神和DUT的MSN大神對(duì)我的幫助和指點(diǎn)。

1.簡(jiǎn)單排序

由于數(shù)據(jù)量比較小,可以采用的排序算法比較多,常規(guī)的如冒泡排序,選擇排序等均可以通過(guò),但是要自己實(shí)現(xiàn),較為麻煩(比賽的時(shí)候寸金寸光陰啊)。最好的方法是c++中使用sort函數(shù),注意需要聲明對(duì)應(yīng)的cmp函數(shù),或者重載結(jié)構(gòu)體中的<。

2.簡(jiǎn)單字符串處理

這個(gè)題目比較基礎(chǔ),c++的話稍微慢一點(diǎn),要手動(dòng)的判斷空格,然后將各個(gè)單詞提出出來(lái),壓入stack中,再依次彈出就可以了。本題我用的是java實(shí)現(xiàn)的,java中的string提供了split方法,可以直接用空格來(lái)分割,然后倒序輸出即可,大概只需要5行代碼。

3.簡(jiǎn)單模擬

簡(jiǎn)單的模擬下就可以,注意各個(gè)節(jié)點(diǎn)的鄰居數(shù)量不一定有8個(gè)(邊界上的點(diǎn)),然后按照題目中所給的條件一次判斷各個(gè)節(jié)點(diǎn)的死活。

4.貪心 or DFS + 剪枝

錯(cuò)誤思路:

暴力bfs,用set進(jìn)行判重,復(fù)雜度O(2^n),超時(shí)了。

正確思路:

方法1:先聲明一個(gè)性質(zhì),每個(gè)鎖最多只會(huì)被按下一次,按兩個(gè)的效果等于不按。然后利用這個(gè)性質(zhì),先討論第一個(gè)鎖按下與否,然后對(duì)于每一種情況的第i(i>=2)個(gè)鎖按下與否都可以確定下來(lái),依次枚舉即可。

方法2:dfs,每個(gè)鎖只有開(kāi)和不開(kāi)兩種狀態(tài),看似復(fù)雜度為復(fù)雜度O(2^n),加入剪枝條件,在第i個(gè)鎖按下后,若前i-1個(gè)鎖的當(dāng)前狀態(tài)與目標(biāo)狀態(tài)不符,則該方案無(wú)解,原因可類比方法1.

5.DP

按照各個(gè)餐館數(shù)軸位置,先預(yù)處理,prep[i]在1...i-1編號(hào)的節(jié)點(diǎn)中距離i超過(guò)k的最大節(jié)點(diǎn)編號(hào)。然后進(jìn)行dp,D[i][j]表示在1-i這i個(gè)餐館中,選擇開(kāi)j個(gè)的最大盈利,那么有 :?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?D[i][j]=max(D[i-1][j]+D[prep[i]][j-1]+w[i])

答案就是D[n][i]中最大的項(xiàng)。

6.BFS

預(yù)處理一個(gè)N*M的矩陣(可以看做地圖),遍歷每個(gè)流星,依次更新A[i][j]表示當(dāng)前點(diǎn)最早的被摧毀時(shí)間。然后從原點(diǎn)開(kāi)始做BFS,直到找到一個(gè)沒(méi)有被毀壞的點(diǎn)為止,每次轉(zhuǎn)移時(shí)的條件是當(dāng)前時(shí)間+1小于矩陣上的時(shí)間。

7.數(shù)據(jù)結(jié)構(gòu)

本題正解是平衡樹(shù),維護(hù)三個(gè)數(shù)組和一個(gè)平衡樹(shù),b[i]表示編號(hào)為i個(gè)客戶是否在系統(tǒng)中,big[i]表示i用戶在系統(tǒng)中的最大優(yōu)先級(jí)是多少,small[i]表示i用戶在系統(tǒng)中的最小優(yōu)先級(jí)是多少。平衡樹(shù)為tree。

對(duì)應(yīng)每次的三種操作:

1.進(jìn)入系統(tǒng)操作,如果當(dāng)前用戶k在系統(tǒng)中,并且當(dāng)前的優(yōu)先級(jí)p在[ small[k] , big[k] ]這個(gè)區(qū)間內(nèi),那么這個(gè)進(jìn)入是沒(méi)有意義的,直接跳過(guò)(因?yàn)橛脩綦x開(kāi)的時(shí)候,一定不會(huì)利用到該優(yōu)先級(jí))。否則更新small[k],big[k]的值并刪除對(duì)應(yīng)平衡樹(shù)的節(jié)點(diǎn),然后將該優(yōu)先級(jí)的節(jié)點(diǎn)插入。

2.利用平衡樹(shù)找到并刪除最大優(yōu)先級(jí)的客戶的全部節(jié)點(diǎn),更新其b[i]的值。

3.利用平衡樹(shù)找到并刪除最大優(yōu)先級(jí)的客戶的全部節(jié)點(diǎn),更新其b[i]的值。

三種操作均可以在O(logq)的時(shí)間內(nèi)完成,注意一個(gè)性質(zhì),按照我們的做法,任意時(shí)刻,在平衡樹(shù)中屬于一個(gè)用戶的節(jié)點(diǎn)不會(huì)超過(guò)兩個(gè),這也才保證了我們的操作都可以在O(logq)時(shí)間內(nèi)完成。總時(shí)間復(fù)雜度為O(qlogq)

然而這個(gè)題的q很小(題目都沒(méi)給具體的值),大部分人都是使用暴力過(guò)的,即是用一個(gè)數(shù)組維護(hù)而非平衡樹(shù),這樣的操作復(fù)雜度為O(q^2),個(gè)人認(rèn)為是這個(gè)題目的一個(gè)漏洞。

8.最短路+反向邊

一道非常套路的題目,從s回到各點(diǎn)的最短路使用Dijkstra或者SPFA很容易求得,但是如果求得各點(diǎn)到s點(diǎn)的最短路需要做n次Dijkstra,會(huì)超時(shí)。所以就把圖中所有邊反向過(guò)來(lái),再?gòu)膕做一次Dijkstra,把兩次dist值相加即可。

這個(gè)題也吐槽一下,很多人用玄學(xué)的Floyd卡過(guò)去了,眾所周知,F(xiàn)loyd的復(fù)雜度為O(n^3)。在這個(gè)范圍是肯定超時(shí)的,故個(gè)人估計(jì)數(shù)據(jù)范圍沒(méi)有那么大,也提醒大家在沒(méi)有思路的時(shí)候可以勇于暴力,或許就能”玄”過(guò)去。

9.數(shù)論(擴(kuò)展gcd)

我的解法是擴(kuò)展歐幾里得,這也是經(jīng)典的數(shù)論題目了,運(yùn)用擴(kuò)展歐幾里得去解a*x+b*y=gcd(a,b),所要的重量d一定是gcd(a,b)的倍數(shù)(否則無(wú)解)。通過(guò)一組特解x0,y0分別得到|x|和|y|最小的四組解(前后各兩組),在這四組解中找到|x|+|y|最小的即是答案。

Zjz大神給出了一種dp的解法(待更新)

10.概率DP

該題目等待zjz大神給出答案

以上是對(duì)于2017年北京大學(xué)交叉學(xué)院的機(jī)試題目解析,可以看出部分題目還是有一定難度的。能達(dá)到6道題以上的同學(xué)可能有需要一定的算法基礎(chǔ)。但是其中也不乏一些技巧的運(yùn)用,我將會(huì)在后續(xù)的文章中講解對(duì)機(jī)試的準(zhǔn)備和考場(chǎng)上技巧的運(yùn)用。

如對(duì)此有疑問(wèn),歡迎大家聯(lián)系我:donghexin1996@126.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,115評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,577評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,514評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,234評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,621評(píng)論 1 326
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,822評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,380評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,128評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,319評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,548評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,970評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,229評(píng)論 1 291
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,048評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,285評(píng)論 2 376

推薦閱讀更多精彩內(nèi)容