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

基本的想法是统计出每个字母的贡献,然后贡献最小的就把更小的数字分给他

但这题关键在于贡献太大了,需要取模,又无法比较大小

所以我们想到因为只有26个字母,我们可以直接高精度算贡献,然后高精度比较大小,这题又是26进制的,那么我们高精度也搞26进制就行了,最后处理一遍进位

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;const int maxl=1e5+10;
const int mod=1e9+7;int n,cas;ll ans;
int alen[30],idx[30],dy[30];
int a[30][maxl];
struct node
{string s;int id;
}b[30];
bool vis[30],in[30];
char s[maxl];inline void prework()
{for(int i=0;i<26;i++){for(int j=0;j<=alen[i];j++)a[i][j]=0;alen[i]=0;vis[i]=false;in[i]=false;}int len,c,x;for(int i=1;i<=n;i++){scanf("%s",s+1);len=strlen(s+1);vis[s[1]-'a']=true;for(int j=1;j<=len;j++){c=s[j]-'a';a[c][len-j+1]++;alen[c]=max(alen[c],len-j+1);}}for(int i=0;i<26;i++){b[i].id=i;for(int j=1;j<=alen[i];j++){a[i][j+1]+=a[i][j]/26;a[i][j]%=26;if(a[i][j+1]>0)alen[i]=max(alen[i],j+1);}}
}inline bool cmp(const int &x,const int &y)
{if(alen[x]!=alen[y])return alen[x]<alen[y];for(int i=alen[x];i>=1;i--)if(a[x][i]!=a[y][i])return a[x][i]<a[y][i];return x<y;
}inline void mainwork()
{for(int i=0;i<26;i++)idx[i]=i;sort(idx,idx+26,cmp);for(int i=0;i<26;i++)if(!vis[idx[i]]){dy[idx[i]]=0,in[idx[i]]=true;break;}for(int i=1;i<26;i++)for(int j=0;j<26;j++)if(!in[idx[j]]){dy[idx[j]]=i,in[idx[j]]=true;break;}ll mi;ans=0;for(int i=0;i<26;i++){mi=1;for(int j=1;j<=alen[i];j++){ans=(ans+mi*dy[i]%mod*a[i][j]%mod)%mod;mi=mi*26%mod;}}
}inline void print()
{++cas;printf("Case #%d: %lld\n",cas,ans);
}int main()
{while(~scanf("%d",&n)){prework();mainwork();print();}return 0;
}

hdu6304 Balala Power!相关推荐

  1. hdu 6034 B - Balala Power! 贪心

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

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

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

  3. HDU6034 Balala Power!

    Balala Power! 这道题的题意就是给你n个字符串,让你对每个字符赋值(0~25)(注意,每种字符只能赋一个值),然后让你求这些字符的26进制的和的最大值,并且用十进制输出这个最大值. 解释一 ...

  4. HDU 2017 多校联赛 1002 Balala Power!

    题目描述 Talented Mr.Tang has n strings consisting of only lower case characters. He wants to charge the ...

  5. HDU 6034 Balala Power!

    题目内容 题意:就是给a~z之间的每个字母1个0~25之间的数,即为每个字母的权重(权重的分配依据于每个字母所做的贡献),相当于26进制数.求使所有字符串之和最大的值是多少? 贪心,将所有字母按照所做 ...

  6. B - Balala Power!

    字符串的字典序可以看作为26进制数字的大小 坑点:大数比较大小需要注意 #include <bits/stdc++.h>using namespace std;typedef long l ...

  7. Balala Power(贪心)

    hduoj好像挂了,就不给链接了哇... 题意:给n个字符串,然后每个字母可以转化为其他的25个小写字母,字母a-z依次表示0-25,其中不同的两字母不能转化为相同的字母,让求转化后的字符串的总和最大 ...

  8. 2017多校 Balala Power!

    当时比赛这个题,wa了次,最后发现思路是有一点问题.今天补题,也是出现了很多错误,哎,还是太菜了,必须要多写代码. 题意:将a-z这26个字母用0-25进行赋值.那么对于一个字符串,就可以看作是一个2 ...

  9. (2017多校训练第一场)HDU - 6034 Balala Power! 贪心

    很容易就想到把每个字母的权重都算出来,然后把权重最大的赋值成25,次大的赋值成24......以此类推. 但是字符串长度最大为100000,也就是说一个字母的权重最大是26^100000次方左右,太大 ...

最新文章

  1. 吴恩达最新斯坦福课程《深度学习》全部视频已送达,请签收!
  2. Cell | 分子胶水的兴起
  3. 不要伤害指针(3)--指针和结构类型的关系
  4. Spark读取文本文件并转换为DataFrame
  5. 吃屎是一种什么样的体验?
  6. c语言所有关键字作用,void_C语言void关键字详解
  7. 【原创】从 列表的重复 到 用sum展开二层嵌套列表将子元素合并
  8. centos系统linux复制命令行,linux系统CentOS7中find命令使用
  9. Citrix路径遍历(CVE-2019-19781)
  10. 对抗攻击之SMI-FGSM:北航提出用空间动量提高对抗迁移性
  11. vue移动端下拉切换页面_详解vue移动端 下拉刷新
  12. 全球搜索引擎集合(主要有移动搜索APP的)
  13. VR与平板电脑高速PCB设计实战攻略
  14. 华硕笔记本BIOS设置详解
  15. 原生js写简易别踩白块儿
  16. 百度地图定位不准的问题
  17. cati服务器授权信息无效,cati安装
  18. 【ROM制作工具】如何精简ROM?快速精简ROM详细教程!
  19. Android | WIFI Direct -1 Basic knowledge
  20. Windows Server 2022 开始,DNS 客户端支持 DNS over-HTTPS (DoH)

热门文章

  1. qq账号扫描二维码电脑无法登陆的问题
  2. ios开发——AirPlay的琢磨经历
  3. C语言实现【小游戏——反弹球消砖块】
  4. 合工大Python语言与系统设计大作业:微博评论文本情感分析
  5. 极点五笔for linux
  6. 数学建模--评价类模型
  7. 【毕业设计】 微信小程序购物商城系统 【含代码】
  8. Android 炫酷的手势动画,16个超级漂亮的手机锁屏图案,炫酷到飞起,总有一款适合你...
  9. CAS4.0集成OpenLdap返回用户属性
  10. 维修服务行业薪酬体系设计案例