一開始太激動(dòng)了。。。還以為是Div2 的250呢。直接暴力就交了。。。
想想不對(duì)。。用1e17測(cè)了下,果然超時(shí)。。太腦殘了今天。。
最后重提交了。。。cha對(duì)一個(gè),cha錯(cuò)一個(gè),得了個(gè)140+,排350多名。。淚奔啊。。
歸根結(jié)底還是自己水平不行,繼續(xù)努力吧。
貼一下最終的代碼,還好過(guò)了system test,還有一點(diǎn)點(diǎn)安慰。。。
???class?UnrepeatingNumbers
??????????????{
??????????????public:
??????????????long?long?getNext(long?long?A)
??????????????????{
????????????????????return?_get(A+1);
??????????????????}
??????????????????/*_get()函數(shù)用于獲得>=A的第一個(gè)非重復(fù)數(shù)。
????????????????? 如果A是一個(gè)非重復(fù)數(shù),直接返回。否則A必然為?xxaaXXXX形式。
????????????????????其中XXXX為非重復(fù)的。也就是說(shuō)我們找第一個(gè)重復(fù)數(shù)字。那
???????????????????? 么下一個(gè)非重復(fù)數(shù),必然大于(xxaa+1)0000。
??????????????????? 這樣就跟暴力比就大大減小了計(jì)算次數(shù)。。
????????????????? */
??????????????????long?long?_get(long?long?A){
????????????????????long?long?t?=?1;
????????????????????long?long?res?=?A;
????????????????????int?last?=?A%10;
????????????????????A/=10;
????????????????????while(?A){
???????????????????????????if(?A%10==last){
?????????????????????????????return?_get((A*10+last+1)*t);
???????????????????????????}else{
?????????????????????????????????last?=?A%10;
?????????????????????????????????A/=10;
?????????????????????????????????t*=10;
???????????????????????????}
????????????????????}
????????????????????return?res;
??????????????????}
}
附題:
如果一個(gè)數(shù)字十進(jìn)制表達(dá)時(shí),不存在連續(xù)兩位相同,則稱之為“不重復(fù)數(shù)”。例如,105、1234和12121都是“不重復(fù)數(shù)”,而11、100和
1225不是。
給定一個(gè)long類型數(shù)字A,返回大于A的最小“不重復(fù)數(shù)”。
DEFINITION
Class:UnrepeatingNumbers
Method:getNext
Parameters:long
Returns:long
Method signature:long getNext(long A)
CONSTRAINTS
-A 取值范圍是[0, 1017],注意是閉區(qū)間。
EXAMPLES
0)
54
Returns: 56
大于54的最小數(shù)字是55,但55不是“不重復(fù)數(shù)”。下一個(gè)數(shù)字是56,它滿足條件。
1)
10
Returns: 12
2)
9
Returns: 10
3)
98
Returns: 101
99和100都不是“不重復(fù)數(shù)”,但101是。
4)
21099
Returns: 21201
雖然沒什么名次,但還是應(yīng)該吸取一些教訓(xùn)吧。
這次的問(wèn)題主要在于:
1.水平問(wèn)題 對(duì)題目限制條件不敏感,暴力不能解決問(wèn)題,至少不能解決絕大部分問(wèn)題。平時(shí)做題,對(duì)1000分的題基本上不看,對(duì)難題沒信心
2.心態(tài)問(wèn)題 作為一個(gè)混跡TopCoder這么長(zhǎng)時(shí)間的還是一個(gè)綠色的資深loser來(lái)說(shuō),在一堆紅黃藍(lán)面前,開始就沒打算能進(jìn)top 200。不夠足夠認(rèn)真,謹(jǐn)慎,開始就沒有太強(qiáng)的比賽意識(shí)
教訓(xùn)有:
平時(shí)做題要和平時(shí)比賽一樣,要緊張高效,不能慢慢吞吞的,加強(qiáng)Div2前兩題的正確性和編碼速度。嘗試學(xué)習(xí)理解牛人代碼,嘗試解1000分題.寫代碼要爭(zhēng)取一次編譯通過(guò),少在細(xì)節(jié)問(wèn)題上犯錯(cuò)誤。
比賽要全力以赴,至于結(jié)果如何并不全由自己能把握,不留遺憾,發(fā)揮出自己水平就可以了。
今年大的比賽可能都已經(jīng)結(jié)束了,縱觀騰訊tic,百度之星,有道難題,都只過(guò)了初賽。這一方面,說(shuō)明我的算法水平縱向地比,比以前有了很大提高,但是橫向比較的話,還是處在一個(gè)比較低的水平。畢業(yè)以后可能提高算法水平的機(jī)會(huì)不太多了,爭(zhēng)取在畢業(yè)前多做一些題,多學(xué)一些。此外,不能只顧著做題的量,不能閉門造車,要多學(xué)習(xí)牛人的代碼開闊思路。