• google code jam exercise——All Your Base


    连续碰到几道题搞不定,想找一道简单一点的,来增加一点成就感。于是看了这道题,第一道题,虽然是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.py
    
    import sys
    
    inname = "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 = fin
    sys.stdout = fout
    
    N = 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 result
    
    fin.close()
    fout.close()

    因为是content analysis上的代码,必然small和large case测试都通过了。

  • 相关阅读:
    想你了
    新华都总裁兼CEO唐骏演讲
    中国99%的白领以及他们的家庭即将面临破产
    你的英语水平就可以达到跟美国人交流的水平啦
    经验语录
    荒谬的加息传言
    人生格言
    不要为油荒找借口
    房地产调控失利 三次调控势不可免
    假设你的月收入2000元,你应该这样用
  • 原文地址:https://www.cnblogs.com/Frandy/p/google_code_jam_all_your_base_python.html
Copyright © 2020-2023  润新知