第一次ACM校賽
- 一、報名
- 1.去年比賽
- 2.流程
- 二、準備
- 1.核心代碼模式和ACM代碼模式
- 1.1核心代碼模式
- 1.2 ACM代碼模式
- 2.往年題目
- 3.機房環境
- 3.1語言
- 3.2復制粘貼
- 3.3陌生的計算機
- 4.了解一些術語
- 5.考試須帶
- 三、比賽心得
- 1.先易后難
- 2.簽到題拿穩
- 3.亂蒙的一題
- 4.沉浸式體驗
- 5.DevC++控制臺 CV不了
- 6.兩道沒做出的題目(記錄)
- 6.1時間(HH:XX)(范圍00:00~23:59)
- 6.2涉及求多個數的最小公倍數
一、報名
1.去年比賽
參賽動機:去年我大二轉專業過來后,新班級的同學就有在參加,而我那個時候大概還在機器人技術和程設藝術方法里掙扎,甚至看不懂C++,
參賽人數:去年參賽人數109,今年爆滿達到了400+,
拿獎難度:校賽拿獎看樣子不難,共8~12題,去年三等獎最少做出了1題,二等獎最少做出了2題,一等獎最少做出了4題,總有簽到題吧,也許努努力可以,我是這么想的,
2.流程
群內現狀:大佬“打架”,如果你不喜歡水群,會覺得有點吵,
報名流程:加群 -> 提交報名表 -> 短信提醒參賽 -> 一次模擬 -> 群檔案查看考場 -> 機房參賽
二、準備
1.核心代碼模式和ACM代碼模式
1.1核心代碼模式
如果你刷過LeetCode,我就不必多講了,就是你不必關注輸入輸出,你只需要看清楚題目所給核心函式的引數和回傳值,在函式里寫核心代碼即可,

1.2 ACM代碼模式
我也是剛接觸OJ(Online Judge)和CodeForces,需要自己輸入,自己輸出,答案也是根據輸出來判定,
給個例子:我甚至前一周還不知道怎么把這種資料輸入…(借口就是平時都是LeetCode在刷,輸入輸出用的不多,能力退化了)

cpp代碼大約長下面這樣:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 510;
int n;
ll a[N];
ll ans;
int main() {
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
}
注:你可以由此一窺ACM追求的是速度(比如全域變數,和一些define的預先設定),真的很殘暴,甚至不美觀,
2.往年題目
群檔案里有,題型、輸入輸出格式、思路值得借鑒,甚至列印帶入機房,
3.機房環境
3.1語言
DevC++寫C++;
Eclipse寫Java,
這兩種語言是主流,
3.2復制粘貼
我這次DevC++寫的時候出了點小問題,
比如輸入樣例復制到剪切板后,無法粘貼在控制臺(粘貼后只顯示^V,因為我是用Ctrl+V粘貼的),
所以后面測驗跑代碼的輸入樣例我都是手敲的,
3.3陌生的計算機
這一次讓我有機會不用自己的PC,在一臺陌生的電腦上敲碼,會發現自己其實還不是很熟悉這些IDE,
(1)比如用Eclipse新建的Java Project,我也許一不留神就沒注意到保存到哪個目錄下了,所以自始至終也沒怎么敢用.
(2)比如我忽然想用Java試試寫寫,會發現Eclipse 沒有縮寫補全 的功能,(需要在工具列里什么Properties設定,但我記不太清楚,就懶得去弄了)遂放棄,
(3)比如即使我把Java代碼寫好,復制粘貼提交時候,我是復制整個class還是怎么?是不是要把package都刪掉?
(4)比如C++頭檔案那些我都懶得記了,這次投機取巧寫了萬能的#include <bits/stdc++.h>(這是我選C++的另一個原因)
這些不確定性,都在正式考試時候成了我把這條路剔除的一個導火索,
所以,凡是你用的上的,都是你確定的,
4.了解一些術語

5.考試須帶
(1)學生證
(2)草稿紙&筆
(3)水
(4)鍵鼠(我這次帶了滑鼠和滑鼠墊,鍵盤我覺得沒那么必要)
(5)列印資料(往年題解,輸入輸出模板,或者資料結構模板)
注:吃的也可以帶,我這次帶了,但沒什么吃的欲望和時間,一點到六點,也不會太餓吧???
三、比賽心得
1.先易后難
(1)檔案夾分類
這次我用DevC++寫C++代碼,在桌面新建了stu215檔案夾(我的考生號),里面一題一個檔案夾(A、B、C、D…)
后來發現不需要,命名時候整上題號就行,一題你是不會想寫多個代碼的,
除非你是一條路走不通想走另一條,還怕自己回來繼續走這條的…(菜雞我啊還沒到這種境界)
(2)每題思路
看一題,可能題目背景有好多廢話,從輸入樣例的引數看起,看題目的核心意思,
在草稿紙上寫寫思路:
比如我很容易看出某題考驗的是數學的排列組合,又或者某題其實思路很簡單,我就會開始分析,然后敲碼試著提交,
(3)Problems
在Problems頁面,你可以看到各題提交數,各題AC(Accepted)的人數和比例,
你就可以大致判斷難易了!先做哪題的選擇也就慢慢清楚了!
2.簽到題拿穩
這次簽到題有兩道,(簽到題就是簡單題,大佬們不屑一顧的題)
(1)一道思路簡單,甚至我在寫復盤時候已經忘了是什么了,
(2)另一道就是原樣輸出,讀取一行話,原樣輸出,
原樣輸出這個,我自己…還真不會,所幸列印了C++的輸入輸出模板,看著里面的字串輸入輸出,胡亂試錯,慢慢摸索出了正確答案,
3.亂蒙的一題
這題是摩爾莊園那道,
思路分析清楚后,其實關鍵代碼就在一個ifelse的分支里,解決了半天都是WA(WrongAnswer),
最后橫下心,列舉,多寫幾個樣例和對應答案找規律,一試,AC!
我靠,我當時直接在草稿紙寫了大大的臥槽,九九歸一啊這是, 第一次覺得AC這么好看~
4.沉浸式體驗
我可是從一點坐到六點,emm也沒有太枯燥,看到AC時候還是很激動的,
機房外堆滿了氣球,你每完成一題會有監考學生給你座位上貼一個氣球,
5.DevC++控制臺 CV不了
靠,控制臺輸入不能CV時候我整個人愣住了,還是含淚手敲了,
6.兩道沒做出的題目(記錄)
除了做出來的三題,還有兩道我呼之欲出(給的輸入樣例全部通過,但有情況沒考慮到所以WA),在此記錄,
6.1時間(HH:XX)(范圍00:00~23:59)
這個其實考驗思路有沒有想完全以及邊界情況的討論,
- 比如
ab:cd
如果a是0或1,那么b最大可以取9
如果a是2,那么b最大只能是3. - 比如
ab:cd ~ ef:gh
如果a和e都沒有確定,那么可以必須設定好兩者距離,使得這個區間的時長最夠小,同時需要考慮bcd和fgh滿不滿足了:
比如?7:00 ~ ?8:00,a和e同時為0或1都能使得間距最小
再比如?8:00 ~ ?700,只能是08:00~17:00這種才符合,
挺繁瑣的其實,我好像確實沒有考慮全,所以沒過,
6.2涉及求多個數的最小公倍數
我恨自己沒留意過最小公倍數的代碼,我的最后思路如下:
- 求4,2,6的最小公倍數
- 首先vector存盤后sort,變為:2,4,6
- 結果初值res=1,遍歷vector
① if(res%a[i]==0) continue;
②if(a[i]%res) res=a[i];
③*上面兩個都不滿足,比如res=4,a[i]=6時
我找到的規律是:最小公倍數 = 兩者乘積 / 最大公約數,比如:12 = 4*6/2
我寫了個gcd函式,計算最大公約數,最后題目輸入樣例和我自己編的例子都沒有問題,但是沒過,郁悶,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/336235.html
標籤:java
上一篇:充滿爭議的 Lombok
