Talented Mr.Tang has nn strings consisting of only lower case characters. He wants to charge them with Balala Power (he could change each character ranged from a to into each number ranged from 0 to 25, but each two different characters should not be changed into the same number) so that he could calculate the sum of these strings as integers in base 2626 hilariously.

Mr.Tang wants you to maximize the summation. Notice that no string in this problem could have leading zeros except for string "0". It is guaranteed that at least one character does not appear at the beginning of any string.

The summation may be quite large, so you should output it in modulo 109+7109+7.


Input

  The input contains multiple test cases.

Output

  For each test case, the first line contains one positive integers nn, the number of strings. (1≤n≤100000)

  Each of the next nn lines contains a string sisi consisting of only lower case letters. (1≤|si|≤100000,∑|si|≤1e6)e
OutputFor each test case, output " Case #xx: yy" in one line (without quotes), where xxindicates the case number starting from 11 and yy denotes the answer of corresponding case.

Sample Input

1
a
2
aa
bb
3
a
ba
abc

Sample Output

Case #1: 25
Case #2: 1323
Case #3: 18221

题目大意:用26个字母表示26进制数中的1~26,并且给你n个字符串,以26进制从字符串转化为数字,问这些数字之和最大能有多少(以十进制输出)。为保证数据正确,其中必存在至少一个字母是代表了0。

思路:模拟。首先每个字母代表的数未知,但由于每个字符在字符串的位置是已知的,我们就可以求出每个字母从26进制转化十进制时的“系数”(即像26^a1+26^a2+26^a3……的数),用数组存储26进制数,在求和时考虑进位,去掉必为0的字母,然后对按26进制数的大小对数组排序,最后就能够求和解出答案了。。。比赛的时候是用的字符串存26进制,理论上也是可以做的,但是因为进位的姿势不对(一边加一边进位,先全部加完再进位才是正确的)导致TLE/(ㄒoㄒ)/

代码

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
#define MOD 1000000007
#define MAXN 100010
using namespace std;
long long num[][MAXN],w[];
long long sum[];
long long a[MAXN];
int u;
char ss[MAXN];
bool vis[];
bool cmp(int s, int t)
{
for(int i=u-;i>=;i--){
if(num[s][i]!=num[t][i])
return num[s][i]<num[t][i];
}
return ;
}
int main()
{
a[]=;
for(int i=;i<MAXN-;i++)
a[i]=*a[i-]%MOD; int n;
int z=;
while(~scanf("%d", &n))
{
u=;
memset(num, , sizeof(num));
memset(sum, , sizeof(sum));
memset(vis,false,sizeof(vis));
int wei,p;
for(int i=;i<n;i++){
scanf("%s", ss);
int l=strlen(ss);
if(l>)
vis[ss[]-'a']=true; for(int j=;j<l;j++){
p=ss[j]-'a';
wei=l--j;
num[p][l--j]++;
sum[p]+=a[wei];
sum[p]%=MOD;
}
u=max(u, l);
}
for(int i=;i<;i++){
for(int j=;j<u;j++){
num[i][j+]=num[i][j+]+num[i][j]/;
num[i][j]=num[i][j]%;
}
while(num[i][u])
{
num[i][u+]+=num[i][u]/;
num[i][u++]%=;
u++;
}
w[i]=i;
}
int cnt=-;
sort(w, w+, cmp);
for(int i=;i<;i++){
if(!vis[w[i]]){
cnt=w[i];
break;
}
}
//cout<<cnt<<endl;
int res=,x=;
for(int i=;i>=;i--){
if(cnt!=w[i]){
res+=(long long)(x--)*sum[w[i]]%MOD;
res%=MOD;
} }
z=z+;
printf("Case #%d: %lld\n",z,res);
}
}

HDU 6034 Balala Power! —— Multi-University Training 1的更多相关文章

  1. HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1

    /* HDU 6034 - Balala Power! [ 大数进位,贪心 ] 题意: 给一组字符串(小写英文字母),将上面的字符串考虑成26进制数,每个字母分配一个权值,问这组数字加起来的和最大是多 ...

  2. 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  3. HDU 6034 Balala Power!(贪心+排序)

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  4. hdu 6034 Balala Power!

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. 2017ACM暑期多校联合训练 - Team 1 1002 HDU 6034 Balala Power! (字符串处理)

    题目链接 Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He ...

  6. HDU 6034 Balala Power!【排序/进制思维】

    Balala Power![排序/进制思维] Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java ...

  7. HDU 6034 Balala Power! (贪心+坑题)

    题意:给定一个 n 个字符串,然后问你怎么给 a-z赋值0-25,使得给定的字符串看成26进制得到的和最大,并且不能出现前导0. 析:一个很恶心的题目,细节有点多,首先是思路,给定个字符一个权值,然后 ...

  8. 6034 Balala Power! (17多校)

    题目大意:给出的字符串,每个字符建立一种与0-25的对应关系.然后每个字符串看成是一个26进制的数.问能获得的数的总和的最大值.(最后对1e9+7取模). 题目思考:把每个字符的贡献值看做一个26进制 ...

  9. hdu 6034 B - Balala Power! 贪心

    B - Balala Power! 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6034 题面描述 Talented Mr.Tang has n st ...

随机推荐

  1. TCP概述

    1. TCP提供的服务 我们知道TCP是一个面向连接.提供可靠数据数据传输服务的传输层协议.面向连接意味着发送端和接收端在交换数据前需要建立一个连接,和我们平常打电话一样,在通话前,需要拨号建立连接. ...

  2. v-text、v-html、v-bind、v-show

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. typedef&define的用法与区别

    1.  typedef typedef故名思意就是类型定义的意思,但是它并不是定义一个新的类型而是给已有的类型起一个别名,在这一点上与引用的含义类似,引用是变量或对象的别名,而typedef定义的是类 ...

  4. 查询SQLSERVER执行过的SQL记录(历史查询记录)(转)

    原文链接:https://www.cnblogs.com/icycore/p/10493237.html 有的时候,需要知道近段时间SQLSERVER执行了什么语句,可以用下面的方法: SELECT ...

  5. [Linux] 025 yum 命令

    1. 常用 yum 命令 (1) 查询 查询所有可用软件包列表 $ yum list 搜索服务器上所有和关键字相关的包 $ yum search 关键字 ps 有点像 Python 的 pip lis ...

  6. Spring学习(一)--简化Java开发,认识Spring

    一.传统Java开发弊端 在传统的开发之中,任何一个有实际意义的应用都会由两个或更多的类所组成,这些类之间相互协调来完成特定的业务逻辑,按照传统的做法,每个对象负责管理与自己相互协作的对象(即他所依赖 ...

  7. luoguP1966 火柴排队(NOIP2013)(归并排序)

    luogu P1966 火柴排队 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include ...

  8. lucene版本升级到4.6.0以上之后使用ik分词器遇到的问题

    在将lucene core版本从4.5.1升级到4.7.0后,如下代码使用ik分词器报错 IKAnalyzer analyzer = new IKAnalyzer(true); StringReade ...

  9. 【记录】mysql查询语句对于为null和为空字符串给出特定值处理

    SELECT if(IFNULL(filedName,"指定字符串")="","指定字符串",filedName) '重命名的字符名' FR ...

  10. elasticsearch索引清理脚本shell

    es-index-clear.sh: #!/bin/bash#----------------------------------------------# Module: es-index-clea ...