2017年四川省赛記錄與反思

2017年省賽在樂山師範學院,時間是2017.6.3~2017.6.4,兩天。

第一天是報道日,提供午飯晚飯,下午15:30~18:00熱身賽。

第二天上午9:00正式開賽,14:00結束。15:30開始頒獎典禮。

第一天7點30起牀,把模板整理了一下,做成PDF拿到店裏去打印。

集訓隊9:15在校門口集合,去地鐵乘車。大一有兩個隊,和張老闆因爲要考高數,不能在上午和我們一起去。他們需要晚上21:30考完高數自己包車去。

天府廣場轉一號線,到火車南站,11:40的C字頭車。

車上背了一關單詞,然後睡意襲來……一覺醒來已經到樂山了。

打了個滴滴,到了「百步梯」。上去就是樂山師範學院了。

集訓隊10來個人,都在關心那個「百步梯」有幾階嗎……

熱身賽

省賽提供devcpp、vim、emacs、codeblocks、eclipse。

桌面上已經有vim了,我配置了一下vim,找到Devcpp的目錄,把Mingw64加入Path變量裏。

然後敲頭文件。

正在敲的時候,發題冊了。因爲是熱身賽,沒有那麼多規矩,包老闆就先開始讀題。

A題是個博弈。一個棋盤,一顆棋子。兩個人,輪流將棋子移動到相鄰(四連通)的格子裏。被走過一次的格子不能再走。給出棋盤長寬,每個人都採用最優的方案求最後誰會贏。

我當時也沒多想,這明顯就是一個博弈。腦補了一下,最優的情形應該是走遍整個棋盤然後無路可走啊!我給包老闆一說,他覺得不大對,他說再讀讀。

反正是熱身賽。我繼續悠閒地敲模板。敲完,編譯運行。

然而,我驚訝地發現,編譯出來的程序是「無法運行的64位程序」,而這個系統是Win7x86,2GB內存。

不管那麼多了,乾脆在Vim裏編輯,扔進Devcpp編譯。

後來我在codeblocks下面發現了Mingw32,理論上那個是能用的。

再看一看榜,很多人過了A題和B題。這太可怕了,難道真的是我想的這樣?

……然後我再仔細一看OJ上的A題,是一個A+B。題冊裏寫着的A題對應的是OJ上的B題。包老闆也覺得事情不對,趕緊讓我把剛剛那樣的思路敲上去交一發。

我們特別注意一下長寬的範圍似乎都是 109 ,就用long long存。乘起來判奇偶。

交了一發B題,AC。

然後我快速敲上A+B,AC。

這個時候,包老闆已經讀完題了。爲了方便接下來都用OJ上的題號指代題目。

C題是個神奇的題目,也是樓上往下扔雞蛋的問題,包老闆說他看不懂。

D題是個約瑟夫環的變種,線性的約瑟夫環。也就是說,n ( 1n106 ,好像是這樣)個人排成一排(不成環!),每次從第一個活着的開始殺,每數 k 個人殺掉。直到數到的編號已經超過 n 了,再從編號最小的活着的開始殺。殺到都死光爲止。給出 q 個詢問,問是第幾個死掉的是誰。

都不大會啊……我做一眼題的能力是很強的,但是做需要一點思考的題目的時候就gg了。

我去讀C題,也不是很懂題意,然後腦補了一個題意給包老闆。他敲出來之後,發現連第二個樣例都過不了。

然後我試圖用鏈表把D敲出來,但是失敗了,算法和碼力雙重意義上的失敗。這麼大的數據,應該是要用數學方法遞推,O(n) 預處理之後回答詢問。

過了好久,包老闆讀懂了C題的題意,然後開始往DP方向上思考,然後過了一會兒開始敲。

包老闆調了好久,交一發,AC。

這個時候已經差不多要到18:00了,很多隊已經收拾東西離開機房了。

我們還在繼續看D……嘗試做出來。

然後熱身賽就這麼結束了。

我把頭文件和vim配置還有Mingw32地址都保存在D盤。重啓一下,東西還在。當時心想應該沒有問題,看起來不會清。

最後一看榜,嚇死了,順哥他們隊AK了,第一。

出來一問,發現他兩個隊友都去樂山大佛玩了,似乎是單挑的……太強大了。

拿着餐券去吃晚飯了。我還有笑神隊吃了好多西瓜……

當晚,包老闆在房間裏刷高數,一直刷到凌晨1點張老闆到爲止……太強大了。

正式賽

和熱身賽一樣,正式賽也是在同一個機房舉行的。比賽場地附近全都是人。

我們悄悄地跑準備室附近看了一眼,發現滿地的氣球裏綠色的球最多。看來那就是簽到題(事實證明不是……那是防AK題的氣球)。

8:55左右,開始進機房。發題冊,一人一本。反覆強調不準偷看題冊,手機需要關機。

而電腦已經開機了,是電子教室軟件控制的黑屏的狀態。

9:00,比賽開始。電腦亮屏。

打開D盤的那一瞬間我簡直想打人。除了編輯器的安裝包什麼都沒有了!

那也沒有辦法。vim需要配置,費時間。那只能用devcpp寫了。

我趕緊敲上頭文件。張老闆和包老闆讀題。

我們讀題是隨機讀題的,據信這樣遇到簽到題的概率更大。

包老闆讀了A,發現是個簽到題。

敲完,樣例過了,交一發,WA。

我趕緊上去debug,發現,包老闆沒有測第四個樣例……而正是第4個樣例爆long long了……但是真的可怕,我建議包老闆統一轉換爲unsigned ll 處理。

看了榜,我發現了F題電科過了。題目是這樣的,判斷 F(x,y)=ax2+bxy+cy2 是不是在 xR,yR 上都有 F(x,y)0 10a,b,c10

我也不知道我怎麼想的,至少我現在還沒有辦法證明我的算法是對的。

算法是這樣的:暴力枚舉整數 x,y[107,107] ,然后看 F(x,y) 是不是有小於0的值。

包老闆下來,我上去,1分鐘敲完,然後交一發,AC。全教室第一個氣球插在了我們前面。

這個題最後出來問了一下其他人怎麼做的,都是用二次函數的 Δ 寫了很久的樣子……

因爲題目安排上的問題,我們這個時候已經是十幾名左右了。

我們繼續讀題。包老闆去看L了。

我發現G題能做一下。給兩個連續的整數區間,讓你輸出分別從兩個區間裏取元素相乘,能產生幾個互異的2017的倍數。

我一下子反應過來,2017是個質數!

也就是說,把兩個區間包含「2017的倍數」的個數乘起來就行了!

一行敲完,然後發現樣例都過不了,我們的答案太大。

我拉上張老闆一起來debug。

原來問題在於,有一些數重複了,所以我們算出來的值大於樣例!

興奮,繼續修改。交一發,WA。

然後張老闆有了個想法,上去寫了一個,但是沒過樣例……

包老闆來了,他看了一下,說你這個個數算的有問題……區間算小了。只見他在我第二版的代碼上減了1……然後就過了樣例。

交一發,AC!

接下來2個小時,我們全都在做L。

我們一開始的思路是待定係數法腦補出公式然後計算。

然後一個小時過去了,毫無進展。

我突然想到,可以枚舉一個維度,利用公式+后綴和計算答案!

這樣只需要 O(n) 的複雜度!

張老闆和包老闆短暫地驗證了一下我的想法。包老闆敲了一段代碼,算出來的答案和我說的一樣。

我發現有個取模的問題,給包老闆說了讓他思考,然後我上去先敲框架。敲完了,樣例過了,交一發,WA Test 2。

……

然後我們檢查了一個小半小時無所謂的細節,WA了5、6次。最後30分鐘的時候,包老闆突然發現,取模遇上除法有問題。

我們給包老闆拿來書,他寫了一個擴展歐幾里得算了一個乘法逆元。

我寫了一個連續自然數的對拍,生成了一堆數字。沒拍出錯誤來。於是交一發,WA Test 2。

包老闆建議交了一下暴力的,TLE Test 2。太可怕了……

然後我改了一下,做了一個隨機數的對拍,出現錯誤了。

包老闆興奮地上去debug,我們輸出了很多中間變量。發現,是我的那一段有問題。計算的過程中,有一個中間變量是負數。經過取模之後就錯了……

發現這個的時候只剩5分鐘了。我們重寫了一下核心代碼,但是因爲括號匹配炸了,連編譯都過不了。

突然,包老闆明白過來,出現負數的時候需要加上mod再%mod!

手忙腳亂地刪掉debug代碼,然後過了我的對拍!交一發。

但是,網頁返回“out of time”。

我們的2017四川省賽結束了。

看了一下,封榜前大概30多名。

這樣的名次肯定是連牌都沒有了。

頒獎典禮

出了門,遇到笑神。笑神給我們說,金14個(10%),銀28個(20%),銅42個(30%)。前42名都是有銀牌的……松了一口氣,最菜也是有銅啊。

最後,銅獎發完,沒有我們隊的名字出現。

拿到了一個銀牌。後來在終榜上是30多名。

反思

自從練習賽的時候多次爆int,我特別注意了int溢出的問題。
所以基本上不會犯這樣的錯誤了。

但是這次……對負數取mod……我是在51nod上見過這樣的題的。但是沒有及時想到……

還有很多問題……未完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值