1769. Old Ural Legend [ACM]

http://acm.timus.ru/problem.aspx?space=1&num=1769    原題鏈接

大致意思:

   在輸入的字符串 "10123456789" 中有若干的子串(substring)可表示某個正整數, 找出一個最小的\不在這些子串中的正整數.    這裏輸出爲 11.  (10, 1-9 均在) 

 

思路: ( 語境: Ruby) 


原來我是想總的長度有限制, 這個字符串能夠表達的子串大小. 所以 我開始了brute force. (蠻力破解, 往往也是我先上手直觀解決的方式.  而且往往也會以失敗告終 - - ) . 


生成1..99999 的字符串數組 , 然後逐一用 .include? 方法 如果找到第一個不在的 則輸出. 


效果, 當然  如果是個短串,這麼做是沒有問題, 可惜的是這裏規定了1.0second.  因此這種方法只能放在了註釋中. 


新的思路: 


原來是以目標出發, 換種角度, 以輸入出發.   從輸入串中不斷的取下一段 看它有哪些可能(構造法)   然後在生成的一個大整數數組中標記已經構造出的整數. 

如  : 

    marker = Array.new ( 1000001, 0 )     


當一個串"123456" 出現, 那麼它就會將  

1.2.3.4.5.6 \  12.23.34.45.56. .... 123456  這些子串對應的數組的值發生變化.   然後再對下段串進行分析 . 


注意的問題,  這些小子串最大長度是取5? 取6?     這個要去分析原串的最大長度.  

迭代優化:

   12345678 .  如果以5爲長度   

第一段 12345

第二段 23456

第三段 34567

第四段 45678 


   爲避免重複記錄 應該考慮後段與前段的重複部分 如何避免?  


huh. that's all.  

 





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章