zoukankan      html  css  js  c++  java
  • 字符串计数

    求字典序在s1和s2之间的,长度在len1到len2的字符串的个数,结果mod 1000007。

    输入描述:
    每组数据包涵s1(长度小于100),s2(长度小于100),len1(小于100000),len2(大于len1,小于100000)

    输入

    ab ce 1 2

    输出

    56

    # --*-- coding:utf-8 --*--
    import sys
    #  思路: 想象成26进制的数,有点动态规划的思想,res[]存放状态数,后一个要依赖于前一个
    def main():
        try:
            while True:
                line = sys.stdin.readline().strip()
                s1,s2,lens1,lens2 = line.split()
                len1 = int(lens1)
                len2 = int(lens2)
                if s1 >= s2:
                    print 0
                res = [0]*len2    #  存放每一个字符长度的数量
                k = 0
                while s1[k] == s2[k]:
                    res[k] = 0
                    k += 1
                j = k
                res[j] = ord(s2[j]) - ord(s1[j]) - 1   # 初始的边界值
        
                lenOfs1 = len(s1)
                lenOfs2 = len(s2)
        
                for i in range(j + 1,len2): # i 的值同样对应res
                    tmp = res[i - 1] * 26   # 会分成三种情况,这种可以直接乘以26
                    if i < lenOfs1:     # 若后边还有字符
                        tmp += ord('z') - ord(s1[i])
                    else:
                        tmp += 26
                    if i < lenOfs2:
                        tmp += ord(s2[i]) - ord('a')
                    else:
                        tmp += 26
                    res[i] = tmp
                print sum(res[len1 - 1 : len2])%1000007
        except:
            pass
    
    if __name__ == "__main__":
        main()
  • 相关阅读:
    Neko Performs Cat Furrier Transform CodeForces
    Neko does Maths CodeForces
    Game HDU
    HDU
    CF1155D Beautiful Array 贪心,dp
    二维差分
    B
    一维差分
    状压dpHDU
    [转载] HBase vs Cassandra:我们迁移系统的原因
  • 原文地址:https://www.cnblogs.com/simplepaul/p/7289456.html
Copyright © 2011-2022 走看看