連續碰到幾道題搞不定,想找一道簡單一點的,來增加一點成就感。於是看了這道題,第一道題,雖然是C輪的,應該不會太難吧?但看完題就知道自己錯了,為什麼連題都看不懂呢?
無奈,求助答案吧。
答案好簡單,連Python代碼都給了。還是簡單分析一下吧。
先來解釋題目意思,題目給出一個字串,包含a-z0-9,表示一個數字,這個數位基數base可以是任意的,要求選一個基數,使字串表示的數最小,並且第一位不為0。
怎樣可以使基數最小呢?base=10,即十進位,有0-9種表示0-9,也可以用a-j表示0-9,反正就是要10個不同的字元。那麼字串的基數最小就可以是字串中不同字元的個數。而且要使表示的數最小,那麼高位上的字元表示的數越小越好了。 這樣,第一個字元字元表示1,第二個字元如果不一樣,就表示2,依此類推。最後將字串轉化為十進位數輸出就可以了。
代碼如下,
#!/usr/bin/python#encoding:UTF-8#Filename:Base.pyimport sysinname = "input.txt"outname = "output.txt"if len(sys.argv)>1: inname = sys.argv[1] outname = inname.rstrip(".in") outname = outname + ".out"fin = open(inname,"r")fout = open(outname,"w")sys.stdin = finsys.stdout = foutN = int(sys.stdin.readline().strip())for qw in range(1, N+1): print 'Case #%d:' % qw, num = sys.stdin.readline().strip() values = {num[0]: 1} for c in num: if c not in values: sz = len(values) if sz == 1: values[c] = 0 else: values[c] = sz result = 0 base = max(len(values), 2) for c in num: result *= base result += values[c] print resultfin.close()fout.close()
因為是content analysis上的代碼,必然small和large case測試都通過了。