有 n 个字符串,每个字符串都是由 A-J 的大写字符构成。现在你将每个字符映射为一个 0-9 的数字,不同字符映射为不同的数字。这样每个字符串就可以看做一个整数,唯一的要求是这些整数必须是正整数且它们的字符串不能有前导零。现在问你怎样映射字符才能使得这些字符串表示的整数之和最大?
每组测试用例仅包含一组数据,每组数据第一行为一个正整数 n , 接下来有 n 行,每行一个长度不超过 12 且仅包含大写字母 A-J 的字符串。 n 不大于 50,且至少存在一个字符不是任何字符串的首字母。
输出描述:
输出一个数,表示最大和是多少。
输入例子:
2ABCBCA输出例子:
1875import java.util.Arrays;import java.util.Scanner;public class Main{ public static void main(String[] args){ long[] scores=new long[100]; boolean[] flag=new boolean[100]; int nums; Scanner sc=new Scanner(System.in); while(sc.hasNextInt()){ nums=sc.nextInt(); for(int m=0;m<10;m++){ scores[m]=0l; flag[m]=false; } for(int i=0;i<nums;i++){ String a=sc.next(); int la=a.length(); for(int j=0;j<la;j++){ int indexnow=a.charAt(j)-65; scores[indexnow]+=(long)(Math.pow(10,la-j-1)); if(j==0&&la>1) flag[indexnow]=true; } } int digit=1,firstdigit=1;long result=0;long firstDigit=5000000000000l; for(int i=0;i<10;i++){ if(scores[i]<firstDigit&&flag[i]==false){ firstDigit=scores[i]; firstdigit=i; } } for(int i=firstdigit;i<9;i++){ scores[i]=scores[i+1]; } Arrays.sort(scores,0,9); for(int i=0;i<9;i++){ result+=scores[i]*digit; digit++; } System.out.PRintln(result); } } }
新闻热点
疑难解答