B - Balala Power!

题目链接

http://acm.hdu.edu.cn/showproblem.php?pid=6034

题面描述

Talented Mr.Tang has n strings consisting of only lower case characters. He wants to charge them with Balala Power (he could change each character ranged from a to z 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 26 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+7.

输入

The input contains multiple test cases.

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

Each of the next n lines contains a string si consisting of only lower case letters. (1≤|si|≤100000,∑|si|≤106)

输出

For each test case, output "Case #x: y" in one line (without quotes), where x indicates the case number starting from 1 and y denotes the answer of corresponding case.

样例输入

1

a

2

aa

bb

3

a

ba

abc

样例输出

Case #1: 25

Case #2: 1323

Case #3: 18221

题意

给你n个由26个字母组成的字符串,你现在要给每个字母用[0,25]赋值,不能要求有前导0,每个值对应一个字母.

要求使得字符串组成的数字和最大。

题解

直接算每个字母的贡献,然后赋值就行,把0给最小的合法的字母即可。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 1e5+7;
  4. const int mod = 1e9+7;
  5. struct node{
  6. int len[maxn];
  7. int w;
  8. int v;
  9. int L;
  10. }p[26];
  11. int n;
  12. string s[maxn];
  13. int flag[26];
  14. int cas = 0;
  15. bool cmp(node A,node B){
  16. if(A.L!=B.L)return A.L<B.L;
  17. for(int i=A.L;i>=0;i--){
  18. if(A.len[i]==B.len[i])continue;
  19. return A.len[i]<B.len[i];
  20. }
  21. return 0;
  22. }
  23. int main(){
  24. while(cin>>n){
  25. cas++;
  26. memset(flag,0,sizeof(flag));
  27. for(int i=0;i<26;i++){
  28. for(int j=0;j<=p[i].L;j++){
  29. p[i].len[j]=0;
  30. }
  31. }
  32. for(int i=0;i<26;i++){
  33. p[i].v=0;
  34. p[i].w=i;
  35. p[i].L=-1;
  36. }
  37. for(int i=0;i<n;i++){
  38. cin>>s[i];
  39. if(s[i].size()>1){
  40. flag[s[i][0]-'a']++;
  41. }
  42. reverse(s[i].begin(),s[i].end());
  43. for(int j=0;j<s[i].size();j++){
  44. p[s[i][j]-'a'].len[j]++;
  45. }
  46. }
  47. for(int i=0;i<26;i++){
  48. for(int j=0;j<maxn-1;j++){
  49. if(p[i].len[j]>=26){
  50. int d = p[i].len[j]/26;
  51. p[i].len[j]%=26;
  52. p[i].len[j+1]+=d;
  53. }
  54. if(p[i].len[j]>0){
  55. p[i].L=max(p[i].L,j);
  56. }
  57. }
  58. }
  59. sort(p,p+26,cmp);
  60. for(int i=0;i<26;i++){
  61. p[i].v=i;
  62. }
  63. for(int i=0;i<26;i++){
  64. if(flag[p[i].w]&&p[i].v==0){
  65. swap(p[i].v,p[i+1].v);
  66. }else break;
  67. }
  68. long long ans = 0;
  69. long long value[26];
  70. for(int i=0;i<26;i++){
  71. value[p[i].w]=p[i].v;
  72. }
  73. for(int i=0;i<n;i++){
  74. long long now = 1;
  75. for(int j=0;j<s[i].size();j++){
  76. ans=(ans+(value[s[i][j]-'a']*now)%mod)%mod;
  77. now=(now*26)%mod;
  78. }
  79. }
  80. cout<<"Case #"<<cas<<": "<<ans<<endl;
  81. }
  82. }

hdu 6034 B - Balala Power! 贪心的更多相关文章

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

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

  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! | 2017 Multi-University Training Contest 1

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

  5. HDU 6034 17多校1 Balala Power!(思维 排序)

    Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He want ...

  6. hdu 6034 Balala Power!

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

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

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

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

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

  9. HDU 6034 Balala Power! —— Multi-University Training 1

    Talented Mr.Tang has nn strings consisting of only lower case characters. He wants to charge them wi ...

随机推荐

  1. Win10 配置Tomcat与Java环境变量

    一:下载JKD与Tomcat包 JDK        密码:d9ym Tomcat   密码:z9pa 二:安装JAVA-JDK与配置环境变量 ①:记住安装的地址 ②:配置JAVA-JDK的环境变量, ...

  2. JavaScript中this 详解

    涵义 this 关键字是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 首先, this 总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象. this.p ...

  3. Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds

    修改$JAVA_PATH/jre/lib/security/java.security文件 将 securerandom.source=file:/dev/random 修改为 securerando ...

  4. SSO单点登录原理

    一.单系统登录机制 1.http无状态协议 web应用采用browser/server架构,http作为通信协议.http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关 ...

  5. WPF在XAML中实现持续动画的暂停、恢复、停止

    1.动画通过EventTrigger监听按钮的FrameworkElement.Loaded事件,但控件载入时就进行动画, 持续动画通过<BeginStoryboard Name="y ...

  6. 使用docker部署.net core应用

    CentOS 使用VS2017新建一个asp.net core项目 发布web应用程序 使用FTP工具,将程序文件copy到linux上 XShell连上linux并登陆 cd /CoreWebDem ...

  7. [BZOJ1977][BeiJing2010组队]次小生成树

    题解: 首先要证明一个东西 没有重边的图上 次小生成树由任何一颗最小生成树替换一条边 但是我不会证啊啊啊啊啊啊啊 然后就很简单了 枚举每一条边看看能不能变 但有一个特殊情况就是,他和环上的最大值相等, ...

  8. eclipse启动web应用 报错

    错误:The origin server did not find a current representation for the target resource or is not willing ...

  9. siege压力测试工具安装和介绍

    Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试. 安装 Siege #wget http://www.jo ...

  10. JavaSE| 包装类| 时间

    包装类 * 因为Java是面向对象的语言,所以很多API或新特性都是针对“对象”来设计的,但是Java设计之初时,是C语言很盛行的时候,所以Java保留了C语言中的8种基本数据类型, 保留它们有好处, ...