2022-6-6 真题练习

MT5 字符串计数
 

描述

求字典序在 s1 和 s2 之间的,长度在 len1 到 len2 的字符串的个数,结果 mod 1000007。
 
数据范围:1 \le len(s1),len(s2) \le 50 \1len(s1),len(s2)50  ,1 \le len1,len2 \le 50 \1len1,len250 
 
注意:本题有多组输入

输入描述:

每组数据包涵s1(长度小于50),s2(长度小于50),len1(小于50),len2(大于len1,小于50)

输出描述:

输出答案。
 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     final static int MOD= 1000007;
 5     public static void main(String[] args) {
 6         Scanner sc=new Scanner(System.in);
 7         while (sc.hasNext()){
 8             String s1=sc.next();
 9             String s2=sc.next();
10             int len1=sc.nextInt();
11             int len2=sc.nextInt();
12             int ans=0;
13             // 中间那块
14             int first=s2.charAt(0)-s1.charAt(0);
15             for (int i=len1;i<=len2;i++){
16                 int add=(int)(first*Math.pow(26,i-1)%MOD);
17                 ans+=add;
18                 // 比s1小的那块
19                 for (int j=1;j<s1.length();j++){
20                     ans-=(int)((s1.charAt(j)-'a')*Math.pow(26,i-1-j));
21                 }
22                 // 比s2小的那块
23                 for (int j=1;j<s2.length();j++){
24                     ans+=(int)((s2.charAt(j)-'a')*Math.pow(26,i-1-j));
25                 }
26 
27             }
28             System.out.println(--ans);
29 
30         }
31     }
32 }

思路:先计算与当前长度保证开头的所有情况,再减去比s1小的,加上比s2小的。最后去掉s2本身。

posted on 2022-06-06 17:24  阿ming  阅读(18)  评论(0编辑  收藏  举报

导航