Balala Power! HDU - 6034 多校1
2017-07-31 20:40
387 查看
很烦的一道题,当时比赛的时候wa了9次,TLE了10+次,还是没过;
第一种思路是将所有的字母都化为到个位,然后一边取模,在打表之后时间够了,但是一直wa,也没找到错的地方;
第二种思路是用26个字符串固定26个字母,就是考虑进位的地方有点繁琐,但一直TLE;
最后时间到了。。
在补题的时候,就试着用数组代替字符串,然后重复操作,再做到找到最小的可做0的一位做0,还是选择 C++ 提交还是TLE,后来同样的代码改了G++就过了。
看来还是太年轻。。如果TLE就G++,C++都交一边
第一种思路是将所有的字母都化为到个位,然后一边取模,在打表之后时间够了,但是一直wa,也没找到错的地方;
第二种思路是用26个字符串固定26个字母,就是考虑进位的地方有点繁琐,但一直TLE;
最后时间到了。。
在补题的时候,就试着用数组代替字符串,然后重复操作,再做到找到最小的可做0的一位做0,还是选择 C++ 提交还是TLE,后来同样的代码改了G++就过了。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; const int mod = 1e9+7; const int maxn = 1e5+5; ll fac[maxn] = {1}; int Hash[27]; bool lead[27]; char str[maxn]; void init() { for(int i = 1; i < maxn; i++) fac[i] = fac[i-1]*26%mod; } struct node { int cnt[maxn]; int id; bool operator < (const node &a) const { for(int i = maxn-1; i >= 0; i--) { if(cnt[i] > a.cnt[i]) return 1; else if(cnt[i] < a.cnt[i]) return 0; else ; } } }a[27]; int main(void) { int n, ca = 1; init(); while(~scanf("%d", &n)) { memset(a, 0, sizeof(a)); memset(Hash, -1, sizeof(Hash)); memset(lead, 0, sizeof(lead)); for(int i = 1; i <= n; i++) { scanf(" %s", str); int len = strlen(str); if(len != 1) lead[str[0]-'a'] = 1; for(int i = 0; i < len; i++) a[str[i]-'a'].cnt[len-i-1]++; } //进位操作,满26个等与一个下一位 for(int i = 0; i < 26; i++) { for(int j = 0; j < maxn; j++) { if(a[i].cnt[j] >= 26) { a[i].cnt[j+1] += a[i].cnt[j]/26; a[i].cnt[j] %= 26; } } a[i].id = i; } sort(a, a+26); for(int i = 0; i < 26; i++) Hash[a[i].id] = 26-i-1; for(int i = 0; i < 26; i++) //前导0找最小的可以做0的位来放0 if(lead[a[i].id] && Hash[a[i].id] == 0) { for(int j = 25; j >= 0; j--) { if(!lead[a[j].id]) { for(int k = 25; k >= j+1; k--) Hash[a[k].id] = Hash[a[k-1].id]; Hash[a[j].id] = 0; break; } } break; } ll ans = 0; for(int i = 0; i < 26; i++) { for(int j = 0; j < maxn; j++) { ans = (ans+fac[j]*a[i].cnt[j]*Hash[a[i].id]%mod)%mod; } } printf("Case #%d: %lld\n", ca++, ans); } return 0; }
看来还是太年轻。。如果TLE就G++,C++都交一边
相关文章推荐
- HDU 6034-(2017多校第一场 Balala Power!)(贪心)
- 【多校训练】hdu 6034 Balala Power!
- (2017多校训练第一场)HDU - 6034 Balala Power! 贪心
- 17 多校 - 1 - 1002 - Balala Power! (HDU 6034)
- HDU 2017 多校联合训练赛1 1002 6034 Balala Power 排序
- 2017 多校训练第一场 HDU 6034 Balala Power!
- HDU 6034 Balala Power!(多校1)
- HDU 6034 Balala Power! 2017多校1.2
- 2017 杭电多校联赛 1002 Balala Power!(数字替换字母)HDU 6034
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)
- HDU 6034 Balala Power!
- HDU 6043 (2017 多校训练赛1 1002) Balala Power!
- HDU 6034 Balala Power! 排序 贪心
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)
- hdu 6034 Balala Power!
- hdu 6034 Balala Power!(DP)
- hdu 6034 Balala Power!(贪心)( 2017 Multi-University Training Contest - Team 1 )(无耻之sort)
- 【HDU 6034】Balala Power!(贪心+进制转换)
- HDU 6034 17多校1 Balala Power!(思维 排序)
- HDU 6034 Balala Power!(贪心)