东南大学2004年程序设计第一届初赛解题报告
???????????????????????????????????????????????? 東南大學2004年第一屆邏輯算法大賽初賽解題報告
????????????????????????????????????????????????????????????????????????????????????? 農夫三拳@seu
???????????????????????????????????????????????????????????????????????????????????? ?drizzlecrj@gmail.com
??? 無意中從硬盤中找到了這個東東,就隨手做了一下。這是計算機系大牛一手搞的一場類似ICPC的比賽。初賽的題目還是比較簡單的,下面簡要做一個說明:
??? 第一題?Simple Addition
???????? 此題是高精度加法, 沒什么好說的。
???? 想要交的可以試試這題http://acm.hdu.edu.cn/showproblem.php?pid=1002 都是大整數加法
??? 第二題????? Cards
???????? 這個題目用三個棧遞歸模擬可以打印所有解。其實這個序列的個數就是組合數學中的Catalan數,也就是
??? (2n)! / (n! * n! * (n + 1))
???????? 關于Catalan數目的技術問題可以做做 http://acm.hdu.edu.cn/showproblem.php?pid=1023
???????? 另外一道和本題有點類似的題目是http://acm.zju.edu.cn/show_problem.php?pid=1004
??? 第三題?Back To Dos
?字符串處理,簡單題。可以先行把CD給除去,這樣就避免了空格問題了。
?類似的題目見http://acm.pku.edu.cn/JudgeOnline/problem?id=1028
??? 第四題?Smith Number
??????? 這個題目不是很難,稍微有點思考的地方就是素數表要存儲多大,其實存儲到sqrt(n)就可以了。
??? 可以這么想,質數因子最多只可能有一個數超過sqrt(n)(可以用反證法證明),因此只要不斷的用sqrt(n)范圍的??? 素數對n進行試除,最后n要么等于1,要么是一個大于sqrt(n)的素數因子,這個是為什么呢?原因同樣可以用反證法??? 予以證明,首先余下的數要么是1,要么比sqrt(n)大肯定沒問題吧!假設余下的因子是合數,那么它的分解質因數一定??? 是兩個大于sqrt(n)的素數,因此矛盾。故最后剩下的一定是素數。
??? 此題與http://acm.pku.edu.cn/JudgeOnline/problem?id=1142類似。
??? 第五題?Is There Any Prefix ?
??????? 我是直接使用STL的search搞的,其實自己寫的話可以構建一棵二叉樹來進行模擬
???? 此題的判斷前綴的問題與http://acm.pku.edu.cn/JudgeOnline/problem?id=1056類似。
???
??? 第六題?Oil Detecting
??????? 此題與http://acm.pku.edu.cn/JudgeOnline/problem?id=1562和
??????? http://acm.pku.edu.cn/JudgeOnline/problem?id=2386幾乎一樣,只改了幾個符號。
??? 這個題目可以使用深度優先搜索(dfs)或者廣度優先搜索(bfs)解決。
??? 第七題?Mining
??????? seu的版本換成中文好理解點了,原題英文最后output的幾句話很費解。
?見http://acm.pku.edu.cn/JudgeOnline/problem?id=2612 直接模擬就可以搞定了
??? 第八題?Digital Display
??????? 模擬,放在二維的字符數組中弄弄可能稍微簡單一些,細心一點控制好格式就可以了。
??? 這題和http://acm.pku.edu.cn/JudgeOnline/problem?id=1102非常類似,大家可以試試
??? 第九題????? Sorting
?這個題目用STL的set可以很簡單的搞定。標程用了詭異的做法,將一個數拆成32x+y的形式,然后用數組索引存儲x,值存儲1<<y
??? 第十題?Recursive Function
??????? 遞歸轉非遞歸,可以使用record table。
??????? 此題與http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1003&cid=46一樣。
??? 第十一題??? Variable Definition
?????? 模擬,只要將左端是否分配的情況保持與右邊一樣就可以了。
?????? 和http://acm.stu.edu.cn/cgi-bin/problem?id=3002一樣
??? 第十二題??? Josephus Permutation
?????? 約瑟夫問題,由于此題僅要求最后一個出圈的人,所以使用約瑟夫問題的數學解法是一個良策(標程使用的是雙端鏈表模擬)。
??? 有兩種思考方式:
???? 第一種可以這樣,假設n個人中循環報數m,第一個出去的人的序號為k,那么剩下的人為
??? 1 2 3 ... k - 1 k + 1 ... n, 我們將從k+1開始的數映射成1, 則k+2對應2, n對應n - k, 1對應成n - k + 1
???? k - 1對應n - 1,那么現在的問題變成了已知n - 1個人進行循環報數m,求出去的人的序號。假設已經求出了n - 1個人循環報數
???? 下最后一個出去的人的序號x,那么它在n個人中的序號應該為(x + k - 1) % n + 1,其中 k = (m - 1) % n + 1,化簡一下就是
??? (x + m - 1) % n + 1, 這樣就可以通過只剩下一個人出圈序號1不斷的向上推導得到結果了。
???? 第二種可以這樣,最后一個出去的人的序號肯定為1,那么它在還剩下兩個人時的時候一定是出圈人后面報1的人。同樣,在兩個人
???? 時出圈的人k一定是在三個人時出圈的人后報k的人,依次下去,可以推導出上述一樣的結論。
???? pku上我暫時遇到了兩題與Josephus有關的題目。一道和本題一樣,http://acm.pku.edu.cn/JudgeOnline/problem?id=2244
???? 另外一道見http://acm.pku.edu.cn/JudgeOnline/problem?id=1012
試題下載??????
我的解決方案
由于數據太大,無法上傳,需要的朋友請與我qq聯系
281845569
總結
以上是生活随笔為你收集整理的东南大学2004年程序设计第一届初赛解题报告的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 江西五十铃mu-x发动机可以改成双涡轮增
- 下一篇: 技术支持工程师自测评估下载