#include <bits/stdc++.h>
#include <iostream>
using namespace std;
const int MAXN = 1e5+;
const long long mod = 1e9+;
int n;
int maxj;
struct node
{
int id;
int num[MAXN]={};
bool operator < (const node &a)const
{
for(int j = maxj; j >= ; --j)
if(num[j] != a.num[j])
return num[j] > a.num[j];
return ;
}
} p[];
string s[MAXN];
long long num[];
long long k[MAXN];
int book[];
int main()
{
ios::sync_with_stdio(false);
k[] = ;
for(int i = ; i <= ; ++i)k[i] = (k[i-]*)%mod; int ca = ;
maxj=;
while(cin>>n)
{ for(int i = ; i < ; ++i)
{
book[i]=;
for(int j=; j<=maxj; j++)p[i].num[j]=;
p[i].id = i;
} for(int i = ; i < n; ++i)
{
cin>>s[i];
int l = s[i].size();
for(int ii = l-,j=; ii >=; --ii,++j)
{
if(ii==)book[s[i][ii]-'a']=;
int t = s[i][ii]-'a';
p[t].num[j]++;
}
} maxj=;
for(int i = ; i < ; ++i)
{
for(int j = ; j <= ; ++j)
{
p[i].num[j+] += p[i].num[j]/;
p[i].num[j]%=;
if(p[i].num[j]>)maxj=max(j, maxj);
}
}
sort(p,p+); int i;
if(book[p[].id])
{
for(i=; i>=; i--)if(book[p[i].id]==)break;
p[]=p[i];
for(; i<; i++)p[i]=p[i+];
}
for(int i = ; i >= ; --i)num[p[-i].id] = i; //printf("%d\n",p[0].id);
long long ans = ;
for(int i = ; i < n; ++i)
{
int l = s[i].size();
for(int j = ; j < l; ++j)
{
//printf("%d\n", num[s[i][j]-'a']);
ans = (ans+num[s[i][j] -'a']*k[l--j]%mod)%mod;
}
}
cout<<"Case #"<<++ca<<": "<<ans<<endl;
}
return ;
}

模拟字典序排序——hdu6034的更多相关文章

  1. PTA数据结构与算法题目集(中文) 7-37 模拟EXCEL排序 (25 分)

    PTA数据结构与算法题目集(中文)  7-37 模拟EXCEL排序 (25 分) 7-37 模拟EXCEL排序 (25 分)   Excel可以对一组纪录按任意指定列排序.现请编写程序实现类似功能. ...

  2. 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】

    方法1:通过get()方法获取属性值 package com.sxd.test.controller; public class FirstCa{ private Integer num; priva ...

  3. Leetcode 385.字典序排序

    字典序排序 给定一个整数 n, 返回从 1 到 n 的字典顺序. 例如, 给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] . 请尽可能的优化算法的时间复杂度和 ...

  4. 微信支付MD5签名算法C#版,ASCII码字典序排序0,A,B,a,b

    /// <summary> /// 微信支付MD5签名算法,ASCII码字典序排序0,A,B,a,b /// </summary> /// <param name=&qu ...

  5. UVA215-Spreadsheet Calculator(模拟+拓扑排序)

    Problem UVA215-Spreadsheet Calculator Accept:401  Submit:2013 Time Limit: 3000 mSec Problem Descript ...

  6. 九度OJ 1159:坠落的蚂蚁 (模拟、排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1098 解决:277 题目描述: 一根长度为1米的木棒上有若干只蚂蚁在爬动.它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右.如 ...

  7. java字典序排序

    import java.util.Comparator; import java.util.ArrayList; import java.util.Collections; public class ...

  8. leetCode 31.Next Permutation (下一个字典序排序) 解题思路和方法

    Next Permutation  Implement next permutation, which rearranges numbers into the lexicographically ne ...

  9. PAT甲题题解-1016. Phone Bills (25)-模拟、排序

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789229.html特别不喜欢那些随便转载别人的原创文章又不给 ...

随机推荐

  1. js 搞点小事情

    <script type="text/javascript"> (function(){ if(!window.console){window.console ={lo ...

  2. 使用Git实现Laravel项目的自动化部署

    简介 不知道大家一开始是怎么使用 git 进行开发的,反正我个人是先将代码提交到 github 仓库,然后用 SSH 登录到服务器,然后进行克隆或者版本更新.听起来就很麻烦,当然实际操作中也很麻烦,那 ...

  3. 关于SQL中 =:的含义

    一个很恶臭的例子来说明 =: 在sql语句中是做什么用的 int number= 114514: //众所周知野兽先辈的咆哮(世界级美声)是一串数字 var strSql = "select ...

  4. 利用SparkSQL(java版)将离线数据或实时流数据写入hive的用法及坑点

    1. 通常利用SparkSQL将离线或实时流数据的SparkRDD数据写入Hive,一般有两种方法.第一种是利用org.apache.spark.sql.types.StructType和org.ap ...

  5. magento开发必备插件列表汇总

    magento和wordpress一样,因为开放而倍加优秀 ,搜集下常用的magento插件以便大家使用时更加方便快捷 导航放到右侧:magento-community/RicoNeitzel_Ver ...

  6. springMVC配置文件 的约束

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  7. Ruby——输入&输出

    Ruby的输入和输出操作.输入是程序从键盘.文件或者其他程序读取数据.输出是程序产生数据.可以输出到屏幕.文件或者其他程序. Ruby中的一些类有些方法会执行输入&输出操作.例如Kernel. ...

  8. git_全局忽略DS_store

    创建设置文件 vi ~/.gitignore_global 在文件里输入 /*.DS_Store .DS_Store 设置这个文件全局生效 git config --global core.exclu ...

  9. split("\\s+") 和 split(" +") 有什么区别?

    原文地址:https://blog.csdn.net/it_taojingzhan/article/details/51968993 "hello world, this is Al&quo ...

  10. C++——代码风格

    google代码风格 1.使用安全的分配器(allocator),如scoped_ptr,scoped_array 2.测试用的,其他的不能用: 2.1 友元 2.2 C++异常 2.3 RTTI 3 ...