有 n 個字符串,每個字符串都是由 A-J 的大寫字符構(gòu)成。現(xiàn)在你將每個字符映射為一個 0-9 的數(shù)字,不同字符映射為不同的數(shù)字。這樣每個字符串就可以看做一個整數(shù),唯一的要求是這些整數(shù)必須是正整數(shù)且它們的字符串不能有前導零。現(xiàn)在問你怎樣映射字符才能使得這些字符串表示的整數(shù)之和最大?
每組測試用例僅包含一組數(shù)據(jù),每組數(shù)據(jù)第一行為一個正整數(shù) n , 接下來有 n 行,每行一個長度不超過 12 且僅包含大寫字母 A-J 的字符串。 n 不大于 50,且至少存在一個字符不是任何字符串的首字母。
輸出描述:
輸出一個數(shù),表示最大和是多少。
輸入例子:
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); } } }
新聞熱點
疑難解答