多校1002 HDU-6034 Balabala Power-26进制大数加&贪心
来源:互联网 发布:最长递增子序列 c语言 编辑:程序博客网 时间:2024/06/06 03:44
题目链接:HDU-6034
大意:
给一堆字符串,每个字符串分配一个权值,把每个字符串变成26进制数,求数字和最大。
要求不能有前导 0,即首字母不为 0 。
思路:
每个字符串相加,得到一个很长的数组,每个位置记录这个位置的值(字母和其出现次数),即 int [MAXN][26] 其值表示个数。
将其看成一个大数,对其进行进位处理,然后排序,从高到底赋值,并且要避免前导 0 。
避免前导 0 的具体做法是,从小的开始赋值,遇到非首位的即赋为 0 ,再从大开始一一赋值。
代码:
#include<bits/stdc++.h>using namespace std;typedef long long ll;#define mem(s,t) memset(s,t,sizeof(s))#define D(v) cout<<#v<<" "<<v<<endl#define inf 0x3f3f3f3f//#define LOCALconst ll MOD = 1000000007;ll mp[150005][26];int n, m;char s[100005];bool notz[26];int val[26], a[26];void up() { for (int j = 0; j < 26; j++) { for (int i = 0; i < m; i++) { mp[i+1][j] += mp[i][j] / 26; mp[i][j] %= 26; } while (mp[m][j]) { mp[m+1][j] += mp[m][j] / 26; mp[m][j] %= 26; m++; } }}bool cmp(int a, int b) { for (int i = m-1; i >= 0; i--) { if (mp[i][a] != mp[i][b]) return mp[i][a] > mp[i][b]; } return 0;}void solve() { for (int i = 0; i < 26; i++) a[i] = i; sort(a, a+26, cmp); for (int i = 25; i >= 0; i--) if (!notz[a[i]]) { val[a[i]] = 0; break; } int tmp = 25; for (int i = 0; i < 26; i++) if (val[a[i]] == -1) val[a[i]] = tmp--;}int main() { int tt = 0; while (~scanf("%d", &n)) { mem(notz, 0); mem(mp, 0); mem(val, -1); m = 0; for (int i = 1; i <= n; i++) { scanf("%s", s); int len = strlen(s); if (len != 1) notz[s[0]-'a'] = 1; m = max(m, len); for (int i = 0; i < len; i++) mp[len-i-1][s[i]-'a']++; } up(); solve(); ll ans = 0; for (int i = m-1; i >= 0; i--) { ans = ans * 26 % MOD; for (int j = 0; j < 26; j++) { ans = (ans + (ll)mp[i][j]*val[j] % MOD) % MOD; } } printf("Case #%d: %lld\n", ++tt, ans % MOD); }}
PS.自己打老是出错,不知道怎么回事,疯狂wa近乎绝望,模拟太差,此代码搬运自学长博客 nicetomeetu
阅读全文
0 0
- 多校1002 HDU-6034 Balabala Power-26进制大数加&贪心
- HDU 6034 Balala Power!(大数进制)
- 【HDU 6034】Balala Power!(贪心+进制转换)
- 2017多校联合一1002/hdu6034Balala Power!(搜索,贪心,排序,大数进制)
- hdu 6034 Balala Power!(贪心)
- HDU 6034 Balala Power!【贪心】
- HDU 6034 Balala Power!【贪心】
- HDU 6034 Balala Power! 【模拟】【大数高精度】
- HDU 6034 Balala Power! 排序 贪心
- HDU 6034 Balala Power! (贪心)
- HDU 6034 Balala Power!(贪心)
- HDU 6034 Balala Power!(贪心)
- HDU 6034 Balala Power!(贪心)
- HDU 6034 Balala Power!(贪心)
- HDU6034Balala Power!(大数进制转换)
- (大数乘小数、大数加小数、大数相乘、大数阶乘、大数进制转换)
- HDU 6034-(2017多校第一场 Balala Power!)(贪心)
- balabala
- 6. NMF方法及实例
- springmvc常用注解标签详解
- CSS-内边距/外边距
- noip2016普及组复赛
- Spring模拟HTTP请求——RestTemplate类使用的理解
- 多校1002 HDU-6034 Balabala Power-26进制大数加&贪心
- 前端事件绑定
- 小米5调试Installation failed with message Failed to establish session.
- UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
- 高斯消元学习总结
- 算法 直接插入排序 c语言
- Hihocoder-1545 小Hi和小Ho的对弈游戏(博弈)
- 使用struts2.5版本遇到的问题
- URAL 1519 Formula 1(插头DP)