zoukankan      html  css  js  c++  java
  • 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测试都通过了。

  • 相关阅读:
    Django + uWSGI + Nginx 实现生产环境部署
    面试题(一)
    Python基础之路
    Tornado之实例和扩展
    Scrapy源码研究前戏
    算法之基本概念
    RedHat6.2系统安装ipvsadm+keepalived
    oracle11G 同时支持IPV4和IPV6配置
    redhat6.5 安装oracle11G
    python解析字体反爬
  • 原文地址:https://www.cnblogs.com/Frandy/p/google_code_jam_all_your_base_python.html
Copyright © 2011-2022 走看看