每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
在一行上输入一个长度为
、仅由小写字母构成的字符串
。
对于每一组测试数据,输出一个整数,表示字符串的最大“漂亮度”。
2 zhangsan lisi
192 101
对于第一组测试数据,其中一种最优的分配方案是:
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
将字符
的漂亮度依次分配为
;
其余字符随意分配;
最终,得到字符串的“漂亮度”为
。
对于第二组测试数据,其中一种最优的分配方案是:
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
将字符
的漂亮度分配为
;
其余字符随意分配;
最终,得到字符串的“漂亮度”为
。
#include <stdio.h>
#include<string.h>
int main() {
int n;
scanf("%d", &n);
char word[n][10001];
int i = 0;
int p, q;
int t;
int a;
int sum;
for (i = 0; i < n; i++) {
scanf("%s", word[i]);
}
int num[26];
int j = 0, k = 0;
for (j = 0; j < n; j++) {
for (k = 0; k < 26; k++) {
num[k] = 0;
}
for (i = 0; i<strlen(word[j]); i++) {
num[word[j][i] - 'a']++;
}
for (p = 26; p > 0; p--) {
for (q = 1; q < p; q++) {
if (num[q] > num[q - 1]) {
t = num[q];
num[q] = num[q - 1];
num[q - 1] = t;
}
}
}
sum = 0;
a = 26;
for (q = 0; q < 26; q++) {
sum = sum + a * num[q];
a--;
}
printf("%d\n", sum);
}
return 0;
} #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compareFunc(const void *a,const void *b)
{
return *(int*)a < *(int*)b;
}
int main() {
int line;
scanf("%d", &line);
while (line--) {
char str[10024] = {0};
int arr[26] = {0};
scanf("%s", str);
int len = strlen(str);
for(int i=0;i<len;i++){
arr[str[i] - 'a'] ++;
}
qsort(arr, 26, sizeof(int), compareFunc);
int sum = 0;
for(int i=0;i<26;i++){
sum += (26 - i)*arr[i];
}
printf("%d\n", sum);
}
return 0;
} #include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define N 10001
void swap(int num[], int a, int b)
{
int temp = num[a];
num[a] = num[b];
num[b] = temp;
}
int main()
{
int n;
scanf("%d", &n);
char s[N] = {0};
for(int i = 0; i < n; i++){
scanf("%s", s);
int len = strlen(s);
int num['z'+1] = {0};
int totatl = 0, rate = 26;
for(int j = 0; j < len; j++){
num[s[j]]++;
}
// 利用冒泡排序法对num进行排序
for(int j = 'a'; j < 'z'; j++){
for(int k = j+1; k <= 'z'; k++){
if(num[k] > num[j]) swap(num, j, k);
}
}
for(int j = 'a'; j <= 'z'; j++){
totatl += (num[j] * rate);
rate--;
}
printf("%d\n", totatl);
}
return 0;
} #include <stdio.h>
int main() {
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
char str[10000]={'\0'};
int max=0;
int score=0;
int a=26;
int count[26]={0};
scanf("%s",str);
for(int j=0;j<strlen(str);j++)
{
count[str[j]-'a']++;
if(max<count[str[j]-'a'])
max=count[str[j]-'a'];
}
while(max)
{
for(int j=0;j<26;j++)
{
if(count[j]==max)
{
score+=a*max;
a--;
}
}
max--;
}
printf("%d\n",score);
}
return 0;
} #include <stdio.h>
#include <string.h>
int f(char *a , int n){
int num[26]={0};
for(int i=0 ;i<n ;i++) {
if(a[i]>='A'&&a[i]<='Z') a[i]+='a'-'A';
num[a[i]-'a']++;
}
for(int i=0 ; i<26 ;i++){
int max=num[i],maxj=i;
for(int j=i+1 ; j<26 ; j++){
if(max<num[j]) max=num[j],maxj=j;
}
num[maxj]=num[i];
num[i]=max;
}
int sum=0;
for(int i=0;num[i]!=0 ;i++) sum+=num[i]*(26-i);
return sum;
}
int main() {
int n;
char a[10001];
scanf("%d",&n);
for(int i=0 ;i<n ;i++ ){
scanf("%s",a);
printf("%d\n",f(a,strlen(a)));
}
return 0;
} #include <stdio.h>
#include <string.h>
int main() {
int n;
char str[10000] = {};
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%s", str);
int len = strlen(str);
int hash[26] = {0};
for (int j = 0; j < len; j++) { //记录字母出现的次数
hash[str[j] - 'a']++;
}
//排序
for (int j = 0; j < 25; j++) {
for (int k = 0; k < 25 - j; k++) {
if (hash[k] < hash[k + 1]) {
int temp = hash[k];
hash[k] = hash[k + 1];
hash[k + 1] = temp;
}
}
}
//输出
int sum = 0;
int add = 26;
for (int j = 0; j < 26; j++) {
if (hash[j] != 0) {
sum += hash[j] * add;
add--;
}
}
printf("%d\n", sum);
}
return 0;
} #include<stdio.h>
#include<string.h>
int main()
{
int n = 0;
int same[10000] = {0};
int result[1000] = {0};
int k = 0;
char str[10000] = {0};
scanf("%d",&n);
for(int a = 0;a < n;a++)
{
scanf(" %s",str);
memset(same,0,sizeof(same));
//统计各字母数
for(int i = 0;i < 26;i++)
{
for(int j = 0;j < strlen(str);j++)
if(str[j] == 'a' + i)
same[i]++;
}
//排序
for(int i = 0;i < 26;i++)
{
for(int j = 0;j < 25;j++)
{
if(same[j] < same[j+1])
{
int temp = 0;
temp = same[j];
same[j] = same[j+1];
same[j+1] = temp;
}
}
}
//计算
int j = 0;
for(int i = 26;i >= 1;i--)
{
result[k] = result[k]+same[j++]*i;
}
k++;
}
for(int i = 0;i < n;i++)
printf("%d\n",result[i]);
return 0;
} #include <stdio.h>
#define M 100
#define N 10000
int main()
{
char str[M][N];
int n,i,j,k,max,arr[26]={0},beauty_sum[M]={0},beauty;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%s",str[i]);
for(i=0;i<n;i++)
{
j=0;beauty=26;
while(str[i][j]!='\0')
{
arr[str[i][j]-'a']++;
j++;
}
for(j=0;j<26;j++)
{
max=0;
for(k=1;k<26;k++)
if(arr[max]<arr[k])
max=k;
if(arr[max]>0)
{
beauty_sum[i]+=(beauty--)*arr[max];
arr[max]=0;
}
}
}
for(i=0;i<n;i++)
printf("%d\n",beauty_sum[i]);
}
return 0;
} #include<stdio.h>
#include<string.h>
int main()
{
int N;
scanf("%d",&N);
//循环输入字符串
for(int i=0;i<N;i++)
{
char str[10000]={0};
scanf("%s",str);
int len=strlen(str);
int number[26]={0};
int i,j;
//将字符串中的小写字母映射到number数组中记录出现次数
for(i=0;i<len;i++)
{
number[str[i]-97]++;
}
//冒泡排序将number数组从小到大排序
for(i=0;i<26;i++)
{
for(j=0;j<26-i-1;j++)
{
if(number[j]>number[j+1])
{
int temp=number[j+1];
number[j+1]=number[j];
number[j]=temp;
}
}
}
//对number数组进行乘积累加
int sum=0;
for(i=0;i<26;i++)
{
sum+=number[i]*(i+1);
}
printf("%d\n",sum);
}
return 0;
} #include <stdio.h>
int main()
{
int n, i, j, k;
int buff;
unsigned char name[10000];
unsigned char* p;
unsigned char map[27];
unsigned char tmp;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s",name);
memset(map,'\0',27);
for(p=name;*p!='\0';p++)
{
*p=tolower(*p);
map[(*p-'a')]++;
}
for(j=0;j<26;j++)
for(k=j+1;k<26;k++)
{
if(map[j]<map[k])
{
tmp=map[j];
map[j]=map[k];
map[k]=tmp;
}
}
for(j=26,buff=0;map[26-j]!=0;j--)
{
buff+=j*(int)(map[26-j]);
}
printf("%d\n",buff);
}
} #include "stdio.h"
int main()
{
int num,x=0;
scanf("%d",&num);
char str[num][10001];
for(int i=0;i<num;i++)
{
scanf("%s",str[i]);
}
for(int i=0;i<num;i++)
{
int cnt[26]={0};
int len = strlen(str);
for(int j=0;j<len;j++)
{
/*****计算各字母数量****/
if(str[i][j]>='A' && str[i][j]<='Z')
cnt[str[i][j]-'A']++;
else if(str[i][j]>='a' && str[i][j]<='z')
cnt[str[i][j]-'a']++;
}
//按照数量降序排列
int buf;
for(int i=0;i<26-1;i++)
{
for(int j=0;j<26-1-i;j++)
{
if(cnt[j]<cnt[j+1])
{
buf=cnt[j];
cnt[j]=cnt[j+1];
cnt[j+1]=buf;
}
}
}
/*****计算漂亮度******/
int piaoliang=26;
int piaoliangdu=0;
for(int i=0;i<26;i++)
{
piaoliangdu += cnt[i]*piaoliang;
piaoliang--;
}
printf("%d\n",piaoliangdu);
}
return 0;
}