題目和題解點這裡:
24號,學校一年一度的程式設計競賽結束了,這一次是我和兩個學弟命題的,還有一些人進行了題面書寫、review,還有一部分人幫忙進行了驗題。所以我想記錄一下這次命題的詳細過程,以後可以成為一次美好的回憶。
大概從元旦前夕開始,逐步有了一些 idea,有些很 easy,有些很難(估計是我太菜了)。大概在過年的那段時間,有了一些比較好的 idea。接下來逐題說一下每一題的 idea 誕生過程,感覺每一題背後都有一些小故事。
a 題:這題是比較晚才確定的,當時缺乙個簡單的貪心簽到題,而我那時幾乎又被榨乾了,所以我讓兩個學弟(張海棟,王豪)去摸索 idea,結果他們給我說了 6 個不同的版本,這題是其中乙個版本。之後張海棟進行了一波嚴格證明,表示排序一定是最優解。(如果沒法嚴格證明,我們就要換題了唄)
b 題:這題是在寒假期間確定的,由王豪提供 idea,感覺這題還是不錯的,看著好像很慌,仔細畫一畫發現並不噁心。
c 題:這題我拿來湊數的。感覺這題出的是最爛的,很無聊。不過在寫 std 和出資料的過程中發生了一些比較有趣的事。
d 題:這個遊戲一般參加過學生會或社團的同學應該都玩過。然而王豪在一次玩這個遊戲的時候,想到了這個問題。仔細分析並不難,可以歸結到經典的 nim 取子遊戲。感覺這題比較接地氣,畢竟遊戲規則大家都懂。
e 題:這題的 idea 誕生比較扯淡,寒假裡有一場牛客網比賽wannafly挑戰賽10,其中的 b 題,當時看錯了題意。看錯後的題意就成了這個 e 題。
f 題:這題也是比較晚確定的題,當時缺好幾個 easy 題。我就開始瘋狂想 easy 的 idea,然後就有了這個 f 和最後的 m。這題王豪直接扔了乙個簡單優美的公式搞定了。
h 題:這題也是自己想的 idea,不過 hdu 的岑肅廷大佬說這題是 wf 的弱化版。當時想到這個 idea 時,並不知道 wf 題長什麼樣。這題最初的版本:平方那部分是絕對值,這樣可以斜率優化搞。改成平方和,斜率優化好像不能來了,但決策單調性並沒有被破壞,因此就這樣了。最後順便和王豪把 wf 那題也擼了一下,確實那題好強啊。
i 題:這題最初的版本是個乙個長度為 10 萬的字串,在這個字串的所有排列中,找到字典序第 k 小的,k 有 1e18。後來發現這個版本很不人性化,寫**的時候要判爆 long long 之類的,所以弱化了一下,改成了這題現在的樣子,比較和諧。
j 題:這題是放寒假之前,有一次和學弟去吃中飯的路上瞎聊聊到的,「尤拉路徑是每一條邊走一次」,「哈密頓路徑是每個節點走一次」,「那麼歐哈密拉頓路徑呢?豈不是一條鏈。」,然後這個 easy 題就有了。
k 題:寒假在家閒著沒事幹,瞎想。於是題目來了。
l 題:這題一開始的版本不是這樣的。那時候覺得缺乙個構造題,於是我就亂想了乙個題。就是把這題去掉 4,5 兩個條件。正常人幾分鐘就知道怎麼搞了,定位為 easy 題。王豪覺得太簡單了,加個對角線的條件試試,後來他開始手動構造,構造出來了一些,但沒有發現明確的規律,於是乎我們開始爆搜,他一開始寫錯**了。我上了幾發之後,發現爆搜賊快。於是這題就有了。
m 題:同 f 題,同一時期想出來的 easy 題。這題有兩個版本,這個版本比另乙個複雜一些,還帶一些坑,所以有用這個版本了。
idea 想完後,我回到了學校和他們開始了正式出題工作,這題命題流程較為規範,我們用了 codeforces 提供的命題平台 —— polygon。真的是乙個非常好用,非常棒的平台,幫助我們大大提高了命題的效率以及準確性。由於命題組英語水平較為奇特,我先分配了幾題分開寫題面,王豪英語水平好像還是我略高一些,所以我讓他主要負責寫 validator(資料範圍合法性驗證) 程式,std(標程) 程式,以及生成資料的程式,以及一些答案錯誤,超時的程式;在他寫程式的同時,我和張海棟瘋狂寫題面,感覺我這種英語真渣渣簡直要瘋了;史海虹大佬由於平時業務繁忙,我分配給他了幾題題面的書寫(d題,f題,m題),包括在後期 review 的時候,史大佬的題面是改動次數最少的,不愧是讀過書的高階知識分子!
在題面搞得差不多完工的時候,我們找到了陳銘洲大佬幫忙一句一句 review,經過一番大改動,題面終於能讓人看懂了。(我很佩服他是怎麼看懂題面的)
下面講一下每一題在出資料,寫題面過程中的小故事:
a 題:張海棟抄來一段孟姜女的故事,經過一頓修改,有了故事第一段,我給他配了幾張圖,然後題目主要部分寫的看不懂,我和他就改造了一下,差不多是最終看到的那樣。造資料倒是沒什麼奇葩故事發生,後來張海棟證明做法的正確性。
b 題:一開始題目不長這樣的,我給王豪看了個什麼東西,他突然靈感大發,來了這個 idea,我聽了之後好像覺得不錯,就留下來了。造資料好像也沒發生什麼奇葩故事。
c 題:這題我先寫了一段中文題面,然後交給張海棟去寫英文題面了,寫完還配圖,真貼心。他造完資料,寫完**,跑資料,發現死迴圈了,後來發現存在負環,spfa一直在那繞圈圈,出不來了... ...於是乎他去研究消圈演算法,未遂。
「出題人不會做怎麼辦?」
「那就改成有向無環圖唄,不就會了。」
希望有會的大佬教我們一下。
d 題:中文題面我寫了一波,交給史海虹大佬去翻譯了,翻譯完了簡潔明瞭,非常到位。造資料好像也沒發生什麼奇葩故事。
e 題:這題資料和題面都是毒瘤,第一版題面是我和張海棟寫的,英語太爛了,表述的很爛,後來陳銘洲大佬幫忙大改了一通題面,有了現在的樣子;這題出資料是個技術活,反正各種搞。。搞了一大堆資料進去。。
f 題:史海虹大佬寫的題面,太強了;王豪負責造資料。好像他造完之後答案沒爆int?被我加強了一下,記不清了。反正把一些浮點數做的卡掉了,寫的不好會掉精度,整數運算最穩。
g 題:我親手寫的題面,真的是要命了。。讀題者估計一看就能發現題面畫風和先前的不一樣,因為這是我寫的。。。。在最後快完工之前,我造了不少資料,張海棟手造了幾組。
h 題:這題題面很短。王豪造了一波資料,我就故意寫暴力,ac了,然後加強資料。
i 題:張海棟寫的題面。王豪造資料,我記得他手動造了很多資料。
j 題:張海棟寫的題面。王豪造完資料之後,發現兩人**好像跑出來結果不一樣,王豪發現張海棟沒考慮到一條鏈乙個環的情況。然後讓我寫,錯了兩次之後我對了,然後他們開始修他們的bug,最後我還加強了不少資料進去。和張海棟也手造了很多。
k 題:我寫的題面,讓王子恆和杭電岑大佬驗的題。出資料好像沒啥故事。
l 題:我寫的題面,我寫的 spj,王豪造了一波資料,王子恆驗題是發現資料水了,沒有出 k<0 的資料。。。我後來和王豪又加了幾組。
m 題:史海虹大佬寫的題面,某天晚上張海棟發現此題有坑。王豪造的資料,我去驗題,我故意寫錯的**,發現 ac 了,寫暴力模擬,也能 ac,然後發現王子恆錯誤**也能 ac,於是我先加了幾組資料進去卡掉了這些錯誤做法,後來大半夜的,張海棟又加了幾組超強資料。
最後幾天,不斷的 review,不斷嘗試錯誤解法能不能通過,感覺我們這種鶸出題目真的是開頭難,中間難,最後更難。最後幾天一直擔心會不會我們的思路是錯的,導致出了個錯題;會不會資料不夠嚴謹,導致暴力,或者錯誤的做法水過去... ... 好像從已知情況來看,沒有發生這樣的問題。
最後再說說現場賽的情況:
這次現場賽邀請到了浙江理工大學,魯東大學,煙台大學來參賽,不說別的學校了,我們學校好像略微有一些慘淡,我們認為的 easy 題,沒有乙個隊伍擼完的。別的題過不了就不說什麼了,可能有一些腦洞沒想清楚,但是 j 題真是個不能再 easy 的題了,但是校內集訓隊大二成員竟然沒有乙個隊伍提交?!我們是被驚到了,明明人家理工早就 ac 了,為啥不去看看這題呢,看了就過了。反而大一的呂效華、蔡怡帥、李欣陽隊伍有 8 次提交,好像他們思路和坑點都想清楚了,但他們被 memset 卡超時了,我覺得挺好的,下次再碰到以這樣形式給出的資料範圍就知道不能 memset 了。本身預計大二的隊伍可以擼 7 到 8 個題,但事實上好像差了好多,當然這個和他們拆開組隊也有很大關係的。
我快畢業了,這估計是我第一次也極有可能是最後一次花了那麼大力氣來弄一套還算能看的題,好像裡面並沒有什麼很奇葩的演算法(因為我和兩個學弟都是鶸,高階演算法和資料結構都不怎麼會),整套題的感覺應該是思考 > 知識。
陳老師希望我出的題可能是一些類似於水仙花數的題,但我覺得那樣的題一來浪費命題人的時間,二來這些題目沒有什麼價值,應該放在課程教學裡的吧,而不是放到競賽中來,三來對參賽選手來說沒什麼有趣的地方,即使過了這題也不會有什麼快感吧。像這次的 b,f,m 題,對於乙個沒搞過 acm,或者搞過一點點時間的人來說,都是留有機會 ac 的。我看到在賽場上,很多人在 m 題上搞了好幾個小時,每次提交**之後按著 f5 重新整理網頁滿懷著希望,看到返回 wa 之後的沮喪,但他們沒有放棄,很多隊伍在 wa 了七八次,甚至十多次之後,當網頁上跳出 accepted 的那一瞬間他們肯定很激動吧,一定是非常有成就感的,因為這是憑他們自己機智的思維得到的成功,即使沒有 ac 很多的題,我覺得這是 acm 競賽真正想要傳遞的精神。
最後,再次感謝王豪,張海棟,王子恆,陳銘洲,史海虹,岑肅廷和我搞了這件事情,把浙江財經大學的題帶到了牛客網上,謝謝。
哈爾濱工程大學第十四屆程式設計競賽 (補題
f 小帆帆走迷宮 簡單dp 一道其實不是很難的四維dp 但是在考場上因為只記錄轉彎次數沒記錄方向沒寫出來 看題發現 其實這道題就是二維數塔 轉向費的dp 所以我們用dp n n k m 來記錄狀態 前兩維n n 代表當前座標 k記錄轉彎幾次 m記錄方向 當m 0 記沒改變方向 當m 1 為改變了方向...
(補題心路)福州大學第十四屆程式設計競賽 重現賽
個人感覺是最短路大冒險 不知道為啥中暑了腦子反而活躍了起來,就是 實現非常gg fzu 2253 salty fish 漁夫翻鹹魚,會把乙個區間裡的1翻成0 0翻成1 區間長度至少為1 問最多有幾個1 統計原先的鹹魚數量 考慮每翻一次,如果本來是1 會使鹹魚數量 1,如果本來是0,會使鹹魚數量 1 ...
長春理工大學第十四屆程式設計競賽(重現賽)B
b bowling game cust的隊員打完省賽後,小r帶著大家去打保齡球。保齡球是一項難度非常高的遊戲,然而這根本難不住校隊成員,他們個個都很厲害 炸和 一發10個瓶都倒。尤其是小r,每次都能閉著眼睛一次扔倒10個瓶。他們當中也有乙個並不那麼厲害的下水道玩家,每次都能把球丟進下水道裡,導致乙個...