2017多校1 hdu-Balala Power!
其实这道题的思路挺简单的,就是找在第一位置没有出现过并且权值小的那个字母为0.
把a~z按照权值排序,其实难就难在这里,权值很大我们怎么给他排序。
其实可以开个数组来存他们每位数是多少,然后给他们比个大小就好了。
后面排好序就从25开始依次递减
bool cmp(int a, int b) {
for (int i=ans-1; i>=0; i--) {
if (jishu[a][i]!=jishu[b][i]) {
return jishu[a][i]<jishu[b][i];
}
}
return 0;
}
其实就是用一个数组排序来代替那个数的位置
/* gyt
Live up to every day */
#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = 1e5+;
const ll maxm = 1e7;
const ll mod = ;
const int INF = <<;
const db eps = 1e-;
int vis[];
ll num[maxn];
ll sum[maxn];
ll jishu[][maxn];
ll n,ans,cnt,res,x;
char a[maxn];
int ca=;
void initt() {
num[]=;
for (int i=; i<maxn; i++) {
num[i]=num[i-]*%mod;
}
}
void init() {
ans=,cnt=-,res=,x=;
memset(jishu, , sizeof(jishu));
memset(sum, , sizeof(sum));
memset(vis, , sizeof(vis));
}
bool cmp(int a, int b) {
for (int i=ans-; i>=; i--) {
if (jishu[a][i]!=jishu[b][i]) {
return jishu[a][i]<jishu[b][i];
}
}
return ;
}
void solve() {
initt();
while(scanf("%lld", &n)!=EOF) {
init();
for (int i=; i<n; i++){
scanf("%s", a);
ll len=strlen(a);
if (len>) {
vis[a[]-'a']=;
}
int xx=;
for (int j=len-; j>=; j--) {
int v=a[j]-'a';
jishu[v][xx]++;
sum[v]+=num[xx];
sum[v]%=mod;
int cnt=xx;
xx++;
}
ans=max(ans, len);
}
for(int i=;i<;i++){
for(int j=;j<ans;j++){
jishu[i][j+]+=jishu[i][j]/;
jishu[i][j]%=;
}
while(jishu[i][ans]){
jishu[i][ans+]+=jishu[i][ans]/;
jishu[i][ans++]%=;
}
}
for (int i=; i<; i++) a[i]=i;
sort(a,a+,cmp);;
for (int i=;i<;i++) {
if (!vis[a[i]]) {
cnt=a[i]; break;
}
}
for (int i=; i>=; i--) {
if (a[i]==cnt) continue;
res+=x*sum[a[i]]%mod;
res%=mod;
x--;
}
printf("Case #%d: %lld\n", ca++, res);
} }
int main() {
// freopen("in.txt","r",stdin);
// freopen("kingdom.in","r",stdin);
//freopen("kingdom.out","w",stdout);
int t=;
// scanf("%d", &t);
while(t--) solve();
}
2017多校1 hdu-Balala Power!的更多相关文章
- 2017 多校训练 1002 Balala Power!
Balala Power! Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 2017 多校3 hdu 6061 RXD and functions
2017 多校3 hdu 6061 RXD and functions(FFT) 题意: 给一个函数\(f(x)=\sum_{i=0}^{n}c_i \cdot x^{i}\) 求\(g(x) = f ...
- 2017 多校2 hdu 6053 TrickGCD
2017 多校2 hdu 6053 TrickGCD 题目: You are given an array \(A\) , and Zhu wants to know there are how ma ...
- 2017 多校5 hdu 6093 Rikka with Number
2017 多校5 Rikka with Number(数学 + 数位dp) 题意: 统计\([L,R]\)内 有多少数字 满足在某个\(d(d>=2)\)进制下是\(d\)的全排列的 \(1 & ...
- 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 ...
- HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1
/* HDU 6034 - Balala Power! [ 大数进位,贪心 ] 题意: 给一组字符串(小写英文字母),将上面的字符串考虑成26进制数,每个字母分配一个权值,问这组数字加起来的和最大是多 ...
- HDU 6034 17多校1 Balala Power!(思维 排序)
Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He want ...
- 2017ACM暑期多校联合训练 - Team 1 1002 HDU 6034 Balala Power! (字符串处理)
题目链接 Problem Description Talented Mr.Tang has n strings consisting of only lower case characters. He ...
- HDU 6034 Balala Power!(贪心+排序)
Balala Power! Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- hdu 6034 B - Balala Power! 贪心
B - Balala Power! 题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6034 题面描述 Talented Mr.Tang has n st ...
随机推荐
- 可视化工具Navicat的使用
可视化工具Navicat的使用 掌握Navicat的基本使用 # PS:在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图 ...
- 如何解决make: Nothing to be done for `all' 的方法
正常情况下,当文件没有更新且已经编译过时,再次make就会报这个错误,表示文件未更新,不需要编译. 如果异常情况没有检测到更新文件,或者想要强制重新编译,只需要make clean,再次编译即可.
- NumPy 从数值范围创建数组
NumPy 从数值范围创建数组 这一章节我们将学习如何从数值范围创建数组. numpy.arange numpy 包中的使用 arange 函数创建数值范围并返回 ndarray 对象,函数格式如下: ...
- Markdown总结整理
今天朋友(SolskGare)向我普及了一个很方便的文本编辑语言Markdown,才意识到之前自己用鼠标一点一点的排版有多low,而且往往还是费力不讨好.今天我就整理一下Markdown的用法,真的是 ...
- Android 实现简单 倒计时60秒,一次1秒
倒计时功能如上图所示,其实就几行代码即可实现效果啦!!! /** 倒计时60秒,一次1秒 */ CountDownTimer timer = new CountDownTimer(60*1000, 1 ...
- Python+Selenium学习--窗口切换及操作元素
场景 有时候我们在测试一个web 应用时会出现多个浏览器窗口的情况,在selenium1.0 中这个问题比较难处理.webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的 ...
- queue模拟
BlockingQueue:顾名思义,首先它是一个队列,并且支持阻塞的机制,阻塞的放入和得到数据.我们要实现LinkedBlockingQueue下面两个简单的方法put和take. put(anOb ...
- [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)
题目链接 https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&t ...
- jmeter操作数据库,分布式,在Linux上运行
jmeter操作数据库: 1.在测试计划中导入数据库jar包 2.添加链接数据库信息 3.mysql:jdc:mysql://192.168.1.116:3307/bugfree?allowMulti ...
- 5-Error:failed to find Build Tools revision 28.0.0 rc1解决方案
将app下面的build.gradle中的版本改为你安装的 sdk 版本: