“玲瓏杯”鄭州輕工業學院第九屆ACM程序設計大賽圓滿結束
ACM/ICPC國際大學生程序設計競賽由美國計算機學會主辦,是目前國際大學生計算機相關領域公認規模最大、水平最高的賽事之一,對參賽學生的學術水平和實踐能力要求很高。為提高學生對ACM/ICPC國際大學生程序設計競賽的認識,培養學生對程序設計的興趣,同時為即將舉辦的河南省第九屆ACM程序設計大賽進行熱身,鄭州輕工業學院計算機與通信工程學院(電子信息工程學院)於2017年4月16日在科學校區舉辦“玲瓏杯”鄭州輕工業學院第九屆ACM程序設計大賽暨河南高校邀請賽。該賽事收到省內各高校的高度關注,本次大賽吸引了鄭州大學、河南大學、河南理工大學、河南工業大學等十幾所院校師生參賽代表共計180余支隊伍、500多名學生前來切磋交流。大賽得到了鄭州瓏凌科技有限公司的獨家冠名贊助。
上午九點,鄭州輕工業學院第九屆“玲瓏杯”ACM程序設計大賽暨河南省高校邀請賽正式開始。比賽為10題5小時賽制,其中,大賽終榜里的前10名有5個隊伍由高中生大佬承包。其中冠軍隊獲得了3000元獎金。一等獎獎金800元,二等獎獎金500元,三等獎獎金300元。另外,比賽其他表現突出的隊伍也分別獲得了:最佳新人獎,最佳女隊將,最快解題獎等獎勵。
“玲瓏杯”為鄭州瓏凌科技有限公司旗下“玲瓏學院”在線教育項目的子項目,經常贊助河南省內高校比賽。除線下和高校的對接,還專門開發設有線上OJ平台“玲瓏OJ”,每周六舉行“玲瓏杯”線上邀請賽,邀請全國各大高校ACmer進行切磋交流,歡迎對算法感興趣的同學。
玲瓏學院官網:http://www.ifrog.cc/
玲瓏OJ網址:http://www.ifrog.cc/acm
本次大賽題目網址:https://acm.zzuli.edu.cn/zzuliacm/contest.php?cid=1220
以下是本次大賽題解
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
“玲瓏杯”鄭州輕工業學院第九屆ACM程序設計大賽題解
Problem A:
tmk 射氣球 比較簡單的題,直接求空間中一個點到直線的距離而已,這道題說了直線和水平的平面平行,我們可以先求投影到直線的距離,然后再算當前點到直線的距離。
Problem B:
base64 解密
將 d2hhdCBpcyB0aGUgcmVtYWluZGVyIHdoZW4gdGhlIG51bWJlciBpcyBkaXZpZGVkIGJ5IDIwMTc/
按 base64 解密可以得到 what is the remainder when the number is divided by 2017?所以答案就是 輸出 x%2017。
具體解密規則:由於后面沒有’=’,所以直接把每個字符按表轉化為 6 位二進制,把每 8 位 分成一組,按 ASCII 碼轉換為對應字符就可以了。
Problem C:DOBRI
按題目算出前綴和,對於 i>2,判斷 sum[i]是否等於 sum[i-1]+sum[i-2]+sum[i-3],進行計數, 就可以了。
Problem D: hipercijevi
對於每個管道,新建一個點,向管道連接的所有點連一條邊,之后進行一次 bfs,將得到的 結果除 2 就可以了。
Problem E: Can Win
轉化為網絡流模型:
其中 MAX 為第 k 隊的最高得分,即 mark[k]+cnrt[k]。
對於每一個 a[i][j],按左半部分建邊;
對於每一個點 i,向匯點建立一條 MAX-mark[i]的邊。
從 s 向 t 跑最大流,如果從 s 連向 i,j 的邊都滿流,則第 k 個隊可以獲得勝利。
Problem F: Tmk 吃湯飯 模擬,如果有人等待,則一秒一秒模擬,否則,直接跳到下一時刻即可。
Problem G: 密室逃脫
可以發現 a^b 與 a 的大小只與 b 的二進制表示中最高位的 1 所在的那一位有關,如果 a 在
這一位是 0,a^b>a,否則 a^b<a,那么就我們只要考慮每一位中有多少個數在這一位是 1 和多少 個數的最高位 1 是這一位,將它們相乘后累加即可,時間復雜度為 O(n*m+m)
Problem H: 維克茲的進制轉換
對於一個數,我們先考慮其最后一位為 0、1、2 中的哪一個。 如果 n&1,那么最后一位只能是 1,所以 f[n] = f[n/2]。 否則,那么最后一位可以是 0 或則 2,所以 f[n]=f[n/2]+f[n/2-1]。 特殊地,f[0] = 1,f[1] = 1,f[2] = 2。
Problem I: 這里是天堂!
先考慮當前情況可行與否
如果當 a>n 或 b>m 時是絕對不可行的,概率為 0
當 a+b<n+m 時,k 一定等於 a+b,否則概率為 0
當 a+b==n+m 時,k>=a+b,否則概率為 0 接下來就是求一個概率,考慮到貓貓來的順序對答案沒有影響,所以可以直接使用古典概型,也即求可行的方案數除以總方案數。
可行的方案數為從 n 里選 a 個的方案乘上從 m 里選 b 個的方案數,總方案為從 n+m 里選 a+b個的方案數。也即 C(n,a)*C(m,b)/C(n+m,a+b)。
由於數據很小,所以可以直接用組合數的遞推公式 C(n,m)=C(n-1,m-1)+C(n-1,m)求出答案,然后分別作為分子分母花間一下就可以了。
Problem J: ht 的生日 party 【分析】
先舉一些例子,當有 10 個人,數 3 個人就出隊 我們只要找到小一點的每個數和當前數對應關系是什么就可以了
例如上圖,假設你下一輪 7 個人最后是第 5 個人存活的,那么 10 個人最后是第 4 個同學存 活的,你如果下一輪 7 個人最后是第 1 個人存活的,那么 10 個人最后是第 10 個同學存活的。
現在就是要找 C 數組和 A 數組的對應關系 從C數組先推到B數組,再從B數組推到A數組
設 A 數組的個數為 n,那么 B 數組和 C 數組就有 n-n/m 個數(/為整除)
A[i]=B[i]+(B[i]-1)/(m-1)
C[i]=B[(n-n/m)+1-i]
這樣就很容易得到這 C 和 A 的關系,設 f[n]表示 n 個人玩游戲,幸存者為第 f[n]個人,所以得到遞推式

復雜度就是 O(n)的