一道ACM題目的反思

2021-05-27 07:26:06 字數 784 閱讀 6203

大三本科,成績還算不錯(很不自謙的說),所有程式設計實驗做的津津有味,亦常為同學捉刀,最近的圖形學實驗寫了4600行c++**,自命程式設計能力還是不錯的。可自大一來嘗試acm便屢屢受挫,鬱鬱不得志,中途因課業緊張未能堅持(壓根沒正兒八經的做過幾道題),也自覺智商平平,無甚希望。

最近在考研與工作間猶豫不決,無聊間註冊了zoj,a+b的問題貼上了一下,哦,過了,證明系統正常,立馬做第二題,雖然沒能嚴格證明演算法的正確性,但很快,**也通過了。對於不能嚴格證明其正確性的解答,總感覺是太僥倖了,要不得。但第三題(crashing balloon)還是存在這種心理,結果屢次wrong answer,遂覺不能再這麼碰運氣,得有能嚴格證明的演算法,而且程式必須考慮各種情況,所以不斷修改,增刪,最終,**200多行了,仍是wrong answer,儘管測試沒發現問題。

先前做的軟體(沒有文件,暫且這樣稱呼吧)能夠執行,就覺沒問題了,足見測試實非易事,而acm的問題對與錯,真跟0與1一般,解法多樣,但所有的結論卻必得相同。所以此前的各種程式只是看起來正確罷了,可**到達一定行數之後,又有誰敢保證其正確性呢。正應了哪本經典書籍裡一句話:寫程式的本質就是控制複雜性。而我,總算自認為很牛b,程式設計技巧嫻熟,無論寫的**多複雜都能理得順,能除錯之並最終驗證其正確性,而後才知只是打字嫻熟而已,自己寫的那麼多那麼囉嗦,給自己挖了個大深坑,累的站都站不起來,還如何跳的出去。編寫乙個清晰而確定的函式實非易事。

憋不住,看一下別人的解答,驚奇的發現他們寫的也就40行,精闢。看來用做軟體的態度做acm還真不行,

最後的乙個問題也是我最不明白的乙個問題,這題的輸入資料可能很大呀:100!,基本型別放不下呀,為什麼不考慮呢。

一道演算法題目的解法

有這樣一道演算法題目 144張牌放到若干的盒子中,每個盒子中放10到 40張,問有多少種放法?不考慮順序 由144 10 14.4 144 40 3.6 可得,盒子的數量最少為4,最多為14.假設有n個盒子 4 n 14 每個盒子中分別放 a1,a2,an 張牌,由於不考慮順序,不妨設a1 a2 a...

一道簡單的acm題目

acm協會主席alphard決定在除夕夜辦一場山寨春晚,立即得到廣大acmer的支援。報名的acmer眾多,主席已經開始忙不過來了。幸好有 細心 的angelclover幫忙,把報名參加山寨春晚的節目單按照預演時間進行了歸類。alphard要求春晚不要超過4小時,但為了不打擊廣大acmer的積極性,...

一道簡單題目的複雜演算法

這是我們第一節彙編上機的實驗題目,問題描述 在debug下實現,記憶體區2100h處有乙個位元組帶符號數 用e命令存入 要求程式設計將其取出1 若此數為正,則3000h單元置01h,2 若此數為0,3000h單元置0h,3 若此數為負,3000h單元置ffh。題目很簡單,應該說簡單得讓人做著無聊,於...