看板 Soft_Job 關於我們 聯絡資訊
討論:練acm都底有啥好處? 1.正名 Association for Computing Machinery, ACM http://www.acm.org/ 非ACM等於解ACM提供的線上評測系統(Online Judge System)網路服務的題目。 而是ACM提供並含括了這項服務。 所以我總是稱呼ACM UVa OJ或線上解題而不是"練ACM"。 如果你硬要我使用"練ACM"這個詞,我寧可去他的Digital Library"練習看ACM學術文章" 。 2.格局 當一個入過World Final的所謂解題高手,如果也認為練ACM就等同於解題, 那我還真對台灣今後在國際上的程式設計競爭(非侷限於競賽)堪憂。 試問台灣拿過幾次ACM ICPC World Final冠軍? 也呼應到"練ACM"這詞放到uva oj的web forum以國際標準檢視, 可能得到的結果和會被酸的次數我猜超過一個手掌的手指頭數。 曾經有人在uva oj web forum裡發表一篇"我一天解超過30題"的炫耀文, 馬上就有當時排名前幾名的Jan跳出來說,"那沒什麼,應該更加努力"等等的鼓勵言詞。 你說IOI或acm icpc也好,那只是學術研究後可以評量的一種方式。 強者通常不是靠壓倒對手來成就自己,反而先自立而後參與競爭獲得優勝。 強者面對弱者通常也不會落井下石或炫耀自己功績,而是採取鼓勵態度。 最重要的,不會常聽到強者的抱怨(自言自語倒是會喔)。 3.你不該做的 解OJ題目的解題者不應該做的:公開自己的程式碼。 曾經我犯下了這個錯誤,並且是大規模的。 直到醒悟才盡可能的刪除那些分享網站及帳號。 (如果仍有公開的部分網站或帳號,請通知我來刪) 甚至,我自己申請delete掉SPOJ account。 討論解法也許是走在規則邊緣,但希望點到為止。 當然你可以秉持著,"我解過這題我很強,為什麼不能說"的態勢, 可是此為此舉其實違反ACM Solver(記得沒錯是出題者)出題的精神。 4.好處 我只能說明對於我自己的好處,無法保證對所有解題者的好處。 解題之於我的好處在於 "可以習慣英文閱讀,並且從題目中獲得額外實作專案的題材"。 比如, UVa OJ有一題是接水管的題目,水流到管子裡跟隨其方向流通到終點的測驗。 能夠得到此題的Accepted,在核心演算法的部分幾乎可說正確。 往後延伸就是GUI化實作成一個可以滑鼠或鍵盤操作的小遊戲。 別小看這遊戲。早在1.2吋磁片年代,智X就出了這樣的產品。 5.年齡限制 ACM ICPC解題競賽是有年齡限制和在學限制的。 6.最後 我覺得被轉錄文之原post:coquelicot (蚯蚓)可以不需強調入過World Final。 反而,你想講點話是出於個人意願,你對ACM的看法。 如果拿掉World Final頭銜還能得到眾多推文, 是否更能證明論點和看法屬於正道令人激賞呢? 雖然我知道一般人應該都在意能否戴上那鑽石皇冠。 ※ 引述《TonyQ (心存善念盡力而為)》之銘言: : ※ [本文轉錄自 Programming 看板 #1K8MNKT6 ] : 作者: coquelicot (蚯蚓) 看板: Programming : 標題: Re: [討論] 所以練acm都底有啥好處? : 時間: Tue Sep 23 20:21:37 2014 : ※ 引述《ga544523 (美麗新世界)》之銘言: : : 別看到標題就靠悲我 : : 我也花了不少時間在上面阿 : : 從大一尾端到現在也有兩個多月了 : : ac了8x題 : : 以前幾乎天天寫 : : wg就一定要在今天弄懂 : : 常常從晚上寫到早上 : : 宵夜當早餐 : : 現在熱情有點燃燒殆盡的感覺 : : 主要是最近是看了一篇文 : : 網上一位寫acm的大哥 : : 對自己花時間寫acm感到很後悔 : : 認為自己不如別人 : : 之後我就開始爬文 : : 有的人認為贊成有的不贊成 : : 這下我亂了 : : 你們覺得勒 : 恩,這好像是我在 Programming 版的第一篇文章, : 本來只是個偶爾看到點進來的浮淺仔,但看到有人這麼問,就只好發篇文了。 : 本人並不是什麼 2000 題的神人, : 不過至少身為個去過 World Final 的人,我還是想講點話。 : 進入正題 ----------- : 這問題其實並不只大學生會遇到, : 同樣的問題我們也可以問問高中生:你為什麼練 IOI? : 以 IOI 而言,有人會嘗試從加分或保送的觀點來說服你, : 但在我看來這一點都不 make sense. : 要知道,他之所以有加分效果甚至保送效果正是因為困難, : 所有去努力的人能得這樣的利益不過鳳毛麟角, : 有什麼道理支持你去做一個期望結果這麼差的事情? : 若你是個信心十足的天才想玩玩那就算了沒話說, : 但這不是一般人的狀況。 : 同樣的,我認為從 Facebook/Google/IBM 等公司的門票來看也是沒道理的。 : 當然不乏這樣得利的人,譬如強者我隊友就收過很多公司的信 (雖然他好像沒興趣XD) : 但那也只是最頂尖的那麼一丁點。 : PR99 之所以是 PR99 , 就是因為腳下有 99% 失敗的人。 : 所以,我認為,要看 ACM 值得練與否,必須從更基本的觀點看, : knowledge : 前面別篇文章曾有提到過,他 2000 題的同事氣場就很不同。 : 我想這有兩種因素,一是自信,二是知識。 : 你說,練 ACM 能有什麼知識可言呢? : 這與你的態度息息相關。 : 舉一個簡單的例子, : 今天你有 n 張圖片,以及一個想要搜尋的東西。 : 透過 library ,你已經有一個能夠判斷符合程度的函式了, : 能否請你利用這個函式找出最符合的 k 張圖片? : 一個完全對演算法不了解的同學, : 可能只會知道要排序,但甚至連怎麼排才好,都不清楚。 : 一個對演算法有所了解的同學, : 可能會給你個快速排序或其他 O(n lg n) 的排序, : 一個對演算法更加了解的人,或是個正常的 ACM 選手, : 應該都要回給你個期望 or 確定線性的作法。 : 但是一個真正認真對待 ACM 的選手, : 能在告訴你兩種方法之後,說明為什麼應該用期望的方法。 : 他順便會告訴你怎麼處理特殊狀況避免複雜度退化, : 他可能還會告訴你已經有什麼函式可用,並順手幫你寫完程式。 : 最後也許他會再說,當你的可用記憶體只能 maintain k+1 張圖片時, : 該如何退化出一個 O(n lg k) 而非 O(n lg n) 的方法。 : 一個好的 ACMer 該知道, : 為什麼他這時用 C++ 而那時用 Java 。 : 知道他該去優化程式的哪個地方而非每個角落, : 他更知道,為何這時可以隨意用動態記憶體, : 但那時就必須自己維護記憶體池。 : 如果你只是想 AC 題目, : 那麼你可能永遠不會知道這些, : 並且永遠在基礎的演算法與資料結構上打轉。 : 但若你認真看待他,去想通他,去嘗試他, : 你就會知道為什麼調整 floyd warshall 的枚舉順序後可以拿來做額外的事 : 你就會知道為什麼 copy on write 實做在指標版本的線段樹上可以很自然, : 你也會知道你為什麼該用劃分樹而不是持久化線段樹就算他們複雜度相同。 : 你會理解,為什麼有時候我們必須認真二分搜,而有時可以隨意枚舉。 : 你會理解,為什麼我們不敢在 double 身上用 == , : 你也會理解,為什麼 rolling hash 該模質數而不是自然溢位。 : 有太多東西,是只想通過題目的人拿不到的。 : 而他們更不會知道這將成為他們更上一層的阻礙。 : 最重要的, : 一個好的 ACMer 會懂得修改演算法來服膺自己的需求。 : 但這卻是一般 call library 的人能可能不懂的。 : 所以 你說, ACM 練了有什麼好處嗎? : It depends on you. : 然而 我必須說,當你把 ACM 從單純的解題提升到一個 : 認真理解、認真分析、認真研究的層次 : 那所花費的時間 是超乎想像的 : 他不只需要你的時間與腦力,更需要夥伴。 : 我就一直覺得我的 ACM 是一門 15 學分的課, : 如果少了夥伴,可能就會是一門 50 學分的課。 : However, 當我去實習,有人對我的 code 表示驚訝時, : 我就知道,我有收穫。 : -------------------------- : 說了些 ACM 的好話,我也來提醒一件重要的事情。 : 一個好的演算法與資料結構老師、好的計算機結構老師、好的 compiler 老師 : 可以彌補掉很多東西。 : 有時你甚至無法看出什麼差異。 (當然前提是你也有認真學) : 究竟需不需要花時間追求那些額外的好處,老實說不一定。 : 但我是追了, : 因為我熱愛。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.161.212 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1424239434.A.76D.html
robler: 你很無聊..02/18 14:09
可能是你認為吧,I dont think so. ※ 編輯: TW0981081007 (111.248.161.212), 02/18/2015 14:11:22
iincho: 其實一班人練ACM的投報率很低....02/18 14:15
iincho: 不過高手時間多通常沒什麼關係...:p02/18 14:15
高手時間沒有多,一樣24小時一天。 已經是高手,解一題花費時間較少。 練習解題的初心者會經過與阻礙僵持的時期,就如我曾經想一題睡在公車站座椅上一樣。 但克服了,思考會變得更敏捷。今後解題會較快速,顯得時間好像很多的樣子。 ※ 編輯: TW0981081007 (223.136.249.7), 02/18/2015 15:07:05
sorryla: 前面還行 最後一點就爛了 不說明自己有下過功夫在ACM上 02/18 15:15
sorryla: 怎麼說服人家他的經驗比較有可信度的02/18 15:16
觀文者有疑問自然就會去google ID。 比如 bleed1979的相關搜尋 bleed1979 acm xxxxxxxxxxxxxx 這好像還是google關鍵字呢。 可能有些人疑問:發文者在OJ用不同ID查不到啊。 那或許說明一下自己解題下過的功夫無妨。 只是,如果我去過World Final但沒拿到冠軍,就不會拿出來講。 僅會說解過幾百題或上千題這樣。
dritchie: 慢走02/18 17:07
這個版不定義噓文規範實在。。。頗呵呵的。 今天除夕夜,就輕鬆點吧,懶得call out版主。 ※ 編輯: TW0981081007 (111.248.161.212), 02/18/2015 17:59:19
Arton0306: 第一點讓我想到 吃麥當勞 和 到麥當勞吃東西 哪個對02/18 17:54
我約熟一點的朋友通常是:不如我們一起麥噹噹吧。 不熟的約法:台北市民生敦化交叉口麥當勞門口見。 我知道你想表達的意思。 以我的角度來看,"吃麥當勞"應該是較多人的使用方式。 因為麥當勞這個品牌已經深植消費者記憶。 或是,"我在吃麥當勞啦,別吵!"這樣。 "到麥當勞吃東西"這句比較像是請求,詢問對方意見在使用的。 比如,"Honey,我們到麥當勞吃點東西啦*_*"這樣。 而第一點和你講得有點不一樣。 "練ACM"在轉錄文中指的狹隘到以Accepted為目標的OJ。 但實際上那些題目是有些許論文文件研究過後所產出的。 而我想表達的是,如果把練ACM當作就是解題的全部, 那只是把自己的領域限縮在AC或WA的世界裡。 不過,我是贊同被轉錄原post所說的好處:It depends on you. 本來想攻略什麼OJ,想解那一題就是自己鑽研心得就好了, 好處也會是自己得到。端看你是什麼心態在解題。 舉自己為例, 當初花費自己三年時間專解沒人解過的題目攻排名就是為了去Google。 結果雖不如我願,但我仍覺得這對我現在programming是有幫助的。 至少我的思考思維可以動得快一些,那就能讓我滿足不後悔的。 ※ 編輯: TW0981081007 (111.248.161.212), 02/18/2015 18:18:10
suhorng: 原被轉錄者說的就是「練ACM *不* 等同於解題」02/18 18:31
Morris1028: 第三點,中槍倒地02/18 19:29
其實也沒什麼倒地不站起來的無聊比喻。 如果是坵蚓本人來會我, 我倒想請他在我的筆電觀賞開發的專案,大概3小時吧。然後輕他說出這套code使用那些 演算法,用的設計模式是哪幾種,這套維運中的系統可能發生的問題在那裡,選用此設計 模式的原因為何。 沒錯,程式技巧頂尖鑽的深,但我認為1500題就很夠了,其他時間可以往廣度發展。 有機密上的問題,所以只能親自在我的筆電上 trace code. 並且同意看過即忘。 當然,如果一個人就在專案時辰內寫完同時間500人以上在線的系統,並且介接其他系統 達到,那我真的佩服。 ※ 編輯: TW0981081007 (223.136.249.7), 02/18/2015 20:45:04
jenocool: 只看到滿滿的個人偏見。02/18 20:38
lNishan: 我覺得你應該先真的看懂他在說什麼02/18 20:51
所以你真的有看懂他寫在說什麼, 是否分享說明一下? 我怎麼看該文的 scope 滿滿的演算法心得,如果只是丟一個函式需求給他,他會寫得比 我好。 但是把鏡頭拉遠到一個程式段,一道系統功能流程呢?誰分析的好這結果難料。 能入ACM-ICPC World Final是有其厲害之處,我尊重尊敬。但有否想過學習研究非舒適圈 之外的有關程式的東西呢? 我還沒說當面對客戶端溝通引導理解時,如何進退應對的處世態度。 你當然可以選擇強自己的獨強其身,看到你的人都很佩服你程式造詣,但是又如何?今天 除夕夜,給晚輩紅包沒,跟長輩拜年沒?寫程式只是個工作,程式語言就是一套讓機器知 道做什麼的指令的集合。多觀察些周遭事物應會比起鑽研解題到一個不行程度來得有趣多 了。 ※ 編輯: TW0981081007 (223.136.249.7), 02/18/2015 21:20:56
arenda: 人家講ACM你扯到處事態度?寫不贏程式就扯別的? 02/18 21:32
並不想比也比不過。 只想表達人生其實不是只有0和1, 離開舒適圈會有更多體悟。 ※ 編輯: TW0981081007 (223.136.249.7), 02/18/2015 21:40:41
jenocool: 真的越講越離譜了02/18 21:45
大概就聊到這了,我去陪小朋友過年 ,請自便。 ※ 編輯: TW0981081007 (223.136.249.7), 02/18/2015 21:48:58
robler: 換了id還是一樣喜歡胡扯 真的很煩 02/18 21:54
robler: 老是幻想一堆有的沒的 真是搞不懂到底是有多無聊 02/18 21:55
sorryla: 誰說程式造詣高的就會喪失觀察周遭事物的能力 都你在說 02/19 01:24
TSW: 鄧家華等級 02/19 02:08
red0210: 沒拿到冠軍就不是人唷,嗚 02/19 02:34
red0210: 該不會你是大陸人? 02/19 02:35
frank11118: 換帳號但還是一樣X 02/19 14:32
mnbv711: bleed1979 acm 根本不是google關鍵字好嗎? 是你自己搜尋 02/20 06:12
mnbv711: 自己太多次導致personalize出來的關鍵字吧 02/20 06:13
mnbv711: 這篇真的無聊 02/20 06:13
youngglasses: 可能我們都不是您這個等級的人. 所以無法了解您思維 02/21 01:03
youngglasses: 只會覺得ACM 有進world final確實很厲害且有想法 02/21 01:03
youngglasses: by 15年前兩年進過亞洲預賽的人... 02/21 01:05
youngglasses: 我們那年代只有台青椒有專門的acm營培訓... 02/21 01:06
youngglasses: 所以對一般學校而言,能夠完全沒練習,打進亞洲預賽 02/21 01:07
youngglasses: 就已經很好了.. 02/21 01:07
youngglasses: 那時對一般學校學生而言,練習寫acm題目並不是流行 02/21 01:14
youngglasses: 所以確確實實是考你的觀念跟反應.everything is new 02/21 01:19
youngglasses: 照一開始原po所說:認真理解、認真分析、認真研究 02/21 01:22
youngglasses: 對程式熱愛,還有與夥伴分工解題,互相磨練. 02/21 01:22
youngglasses: 我覺得這才是我認識的acm.. 並不像您所說 02/21 01:23
youngglasses: 並且acm是多人用一台電腦,協調與分工默契很重要 02/21 01:23
youngglasses: 您文章裡流露出的唯我獨尊的氣息,想像不出一個3人隊 02/21 01:24
youngglasses: 能像你這麼打. 這是很讓人矛盾的 02/21 01:24
longlongint: 充滿各種心靈創傷的一篇 XD 02/21 07:02