1. 程式人生 > >51NOD 1182 完美字符串

51NOD 1182 完美字符串

nbsp question ack https 處理 tput 字符處理 else long

1182 完美字符串 題目來源: Facebook Hacker Cup選拔 基準時間限制:1 秒 空間限制:131072 KB 分值: 5 難度:1級算法題

約翰認為字符串的完美度等於它裏面所有字母的完美度之和。每個字母的完美度可以由你來分配,不同字母的完美度不同,分別對應一個1-26之間的整數。 約翰不在乎字母大小寫。(也就是說字母F和f)的完美度相同。給定一個字符串,輸出它的最大可能的完美度。例如:dad,你可以將26分配給d,25分配給a,這樣整個字符串完美度為77。

Input
輸入一個字符串S(S的長度 <= 10000),S中沒有除字母外的其他字符。
Output
由你將1-26分配給不同的字母,使得字符串S的完美度最大,輸出這個完美度。
Input示例
dad
Output示例
77

題解:基本的字符處理題,統計每個字符出現的次數,排序之後乘1-26即可。

AC代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int a[30];
 7 char s[10007];
 8 int main()
 9 {
10     cin>>s;
11 int n = strlen(s); 12 memset(a,0,sizeof(a)); 13 for(int i=0;i<n;i++) 14 { 15 int x; 16 if(s[i]>=a)x=s[i]-a; 17 else if(s[i]>=A)x=s[i]-A; 18 a[x]++; 19 } 20 sort(a,a+26); 21 long long ans = 0; 22 for(int i=25;i>=0;i--)
23 { 24 ans+=a[i]*(i+1); 25 } 26 cout<<ans<<endl; 27 return 0; 28 }

51NOD 1182 完美字符串