第一百一十四章 兩分鐘講解
很快,高三的那名學(xué)長就講完了自己的代碼,整個過程中非常流暢。
最后,張老師總結(jié)道:“這位同學(xué)講解的非常棒,思路也很清晰,并且代碼沒有出現(xiàn)什么錯誤?!?p> 隨著張老師話音落下,多媒體教室里掌聲響起,那名學(xué)長自信地走下了講臺,而張老師則最終給他了一個20分。
臺下的學(xué)生們爆發(fā)出一陣陣驚呼。這個分?jǐn)?shù)就是現(xiàn)在所有人之中分?jǐn)?shù)最高的了,也是這次競賽中分?jǐn)?shù)最高的了。
至于最后一組?
大家已經(jīng)忘記了還有最后一組。
前四名已經(jīng)確定了,高三兩組,高二兩組,高一全軍覆沒。如果那名李神所在隊伍在代碼上沒有出現(xiàn)錯誤的話,可以擠掉高二的一個名額。
張老師雙手平放,示意大家停止掌聲,然后拿起了最后一張寫滿代碼的草稿紙。
“那么,現(xiàn)在就剩最后一組了,我們歡迎,高一夢響隊來講解他們的代碼?!痹谀钪值耐瑫r,張棟梁也飛快的瞟了一眼草稿紙上的代碼,看了幾眼關(guān)鍵的函數(shù)之后,他就明白了這個隊伍的解題思路。
和剛剛那名高三學(xué)生的方法基本一致,寫法上更加優(yōu)美一些,如果講解不錯的話,他也打算給這個隊伍20分。
這么短的時間內(nèi)能想出這個方法并且寫出來,在他看來已經(jīng)非常不錯了,正??荚嚂r,都是一兩小時一個題,而且還是用鍵盤的情況下。畢竟,手?jǐn)]代碼和鍵盤寫代碼之間的差別對大部分人來說還是很大的。
教室里再次響起了掌聲,只是相比剛剛那名高三學(xué)長下臺的時候的掌聲來說,顯得稀疏了一些,特別占了絕大多數(shù)的高一學(xué)生,已經(jīng)對孟響兩人不抱希望了。畢竟他們之前都沒在電教室看到過這兩兄妹,一看就知道兩人是新手。能在這么短的時間內(nèi)寫出代碼上交并且不出錯已經(jīng)證明了夢神很有天賦了,至于能為高一爭一個前四。
那......有點兒癡人說夢了。
孟夢推了哥哥一把,孟響聽到自己的名字后迅速放下了手中寫好代碼的草稿紙,站起身來。
“哥哥加油?!泵蠅暨€是鼓勵道,雖然他們的解題方法和高三那名學(xué)長的一致,不能展示自己和哥哥剛剛想出來的更好方法讓她有些遺憾。但是現(xiàn)在也只能先把已有的代碼講好,拿到一個名次才是最終要的。
“嗯~~”孟響用力點了點頭,他心里已經(jīng)有了打算。
走上講臺,孟響從張老師手中接過了自己寫滿代碼和注釋的草稿紙。
同時從電腦講臺上拿起一只黑色的涂鴉筆。
“那現(xiàn)在開始吧?”張棟梁問道,只是他有些疑惑孟響為什么要拿筆。畢竟講解代碼只需要把草稿紙放在投影上然后依次講解就行,并不需要寫和畫什么。
孟響看了看身旁的那塊白色小板,稍稍計算了一下尺寸,心里篤定,同時點了點頭回答:“好的?!?p> 隨著張棟梁開始計時,孟響沒有浪費時間,他把草稿紙放在投影儀下,背投上出現(xiàn)了他的代碼。同時,他一手拿著筆一手拿著話筒快速說道:“現(xiàn)在大家看到的是我們組的解法,其實我們組的解法其實和剛剛那位學(xué)長的差不多,但是剛剛我們組員突然想出了一種更加好的解法,所以我現(xiàn)在打算講解我們新的解法。”
底下坐在靠前的學(xué)生們嘴巴都張成了“O”型。
同時還有一些騷動,大伙聽完孟響的話之后,開始竊竊私語。
孟響說完,就快速走到白色小板前,一邊寫著一邊開始講解:“我們組心新想到的是位運(yùn)算法,因為時間原因,我一邊寫代碼一邊講解?!?p> 而張棟梁也被位運(yùn)算法勾起了好奇,因為這確實是目前N皇后問題的最優(yōu)解法。白書上就有這個解法的例子。但是例子歸例子,理解起來可不是那么容易的,更別說講解了。
孟夢坐在底下捂著臉趴在桌子上,不斷地磨著牙。
哥哥怎么可能寫得完,只有兩分鐘時間,完蛋了,她們要得0分了。
想到這,孟夢就有股想上臺把哥哥拽下來自己去講解的沖動。
但是想了想,她不會代碼,只能放棄。
得0分,好丟人呀!
孟夢的小腦袋不斷往自己的手臂彎里鉆著,一副非??鄲赖哪印?p> 孟響一邊寫代碼,沒有絲毫停頓,一邊講解道:“這個算法的核心就是使用bit數(shù)組來代替以前由int或者bool數(shù)組來存儲當(dāng)前格子被占用的情況。”
“程序中主要需要三個bit數(shù)組,每個對應(yīng)的是N皇后格子的一列和正斜列和反斜列?!泵享懸贿呎f,一邊寫了一個函數(shù):
void test(long row,long ld,long rd)......
“其中row表示一列上是否有皇后,如果有則是1,如果沒有就是0,ld和rd分別表示正斜列和反斜列是否有皇后,接著我們要對這三個參數(shù)進(jìn)行或運(yùn)算,求得所有可以放置皇后的列,對應(yīng)位是0?!?p> 大伙瞪大了眼睛,看著孟響手中飛速舞動的黑色涂鴉筆,一行行代碼整齊的展現(xiàn)在白色小板上。
“然后,我們要對結(jié)果取反,取反之后與上全1的數(shù),來求得當(dāng)前所有可以放置皇后的位置,對應(yīng)列數(shù)改為1,也就是求取當(dāng)前哪些列可以放皇后?!闭f到這,孟響連續(xù)寫下了數(shù)個表達(dá)式。
大部分學(xué)生只能懵逼的看著孟響一邊講一邊寫代碼,只有小部分人能夠勉強(qiáng)跟上孟響的思路。畢竟,即便是自己去理解這種位運(yùn)算,沒有十多分鐘也很難理解,更別說這短短的兩分鐘之內(nèi)了。
而張棟梁站在一旁看著孟響,在他看來,目前孟響的代碼還沒有什么錯誤,講解對他來說也非常詳細(xì)。
“pos&-pos的意思就是取最右邊的1再組成二進(jìn)制數(shù)?!?p> “然后......將pos最右邊為1的bit清零?!?p> “......”
“row所有位都為1時,即找到了一個成功的布局,然后我們記錄下來,回溯?!?p> “然后我們考慮棋盤的對稱性......”
孟響的語速越來越快,手中的書寫速度也越來越快,隨著時間逐漸走向終點,在眾人以及妹妹驚訝的眼神中,他趕在時間到達(dá)前,寫完和講解完了位運(yùn)算的方法。