HDU-2017 多校训练赛1-1002-Balala Power!
2017-07-25 17:10
597 查看
ACM模版
思路上,很简单,判断每个字母的贡献,根据贡献排行进行分配,注意前缀不能为 0 的情况。这就是中心思想,很简单……
可是一开始我就无限 CE,先是本机测试编译错误,后来发现是爆内存了,找了好久注意到,在排序的对比函数 cmp() 中,参数没有加引用,这一大杀招,我竟然忘了,导致内存爆掉了,然后我加上后,本地没有问题了,可是三番五次提交都是 CE,然后我又各种改代码,始终无法逃离 CE(代码 One)的魔咒,最后索性重写了一份,顺利 AC(代码 Two) 了,可是感觉和原代码没有啥太大的分别啊,不明了了……贴出来,看看哪个大神能帮我找到吧!
Two:
描述
题解
这个题,是我的一个痛点……真心不难,可是我无限 CE 啊……思路上,很简单,判断每个字母的贡献,根据贡献排行进行分配,注意前缀不能为 0 的情况。这就是中心思想,很简单……
可是一开始我就无限 CE,先是本机测试编译错误,后来发现是爆内存了,找了好久注意到,在排序的对比函数 cmp() 中,参数没有加引用,这一大杀招,我竟然忘了,导致内存爆掉了,然后我加上后,本地没有问题了,可是三番五次提交都是 CE,然后我又各种改代码,始终无法逃离 CE(代码 One)的魔咒,最后索性重写了一份,顺利 AC(代码 Two) 了,可是感觉和原代码没有啥太大的分别啊,不明了了……贴出来,看看哪个大神能帮我找到吧!
代码
One:// CE //#include <iostream> //#include <algorithm> //#include <string> //#include <cstring> //#include <cstdio> // //using namespace std; // //const int MAXK = 26; //const int MAXS = 1e5 + 10; //const int MOD = 1e9 + 7; // //int n, cnt; //int vis[MAXK]; //string s; // //struct xxx //{ // int pos; // int len; // int num[MAXS]; //} Num[MAXK]; // //bool cmp(const xxx &a, const xxx &b) //{ // if (a.len != b.len) // { // return a.len > b.len; // } // for (int i = a.len; i > 0; i--) // { // if (a.num[i] != b.num[i]) // { // return a.num[i] > b.num[i]; // } // } // // return a.num[0] > b.num[0]; //} // //int main(int argc, const char * argv[]) //{ // int ce = 1; // // while (cin >> n) // { // cnt = 25; // memset(vis, 0, sizeof(vis)); // memset(Num, 0, sizeof(Num)); // for (int i = 0; i < MAXK; i++) // { // Num[i].pos = i; // } // // for (int i = 0; i < n; i++) // { // cin >> s; // if (s.length() > 1) // { // vis[s[0] - 'a'] = 1; // } // // for (int j = 0, k = (int)s.length(); j < s.length(); j++, k--) // { // int t = s[j] - 'a'; // Num[t].num[k]++; // int x = k; // while (Num[t].num[x] == MAXK) // { // Num[t].num[x++] = 0; // Num[t].num[x]++; // } // Num[t].len = max(Num[t].len, x); // } // } // // sort(Num, Num + MAXK, cmp); // // if (vis[Num[MAXK - 1].pos]) // { // int i = MAXK - 1; // for (; i >= 0; i--) // { // if (vis[i] == 0) // { // break; // } // } // xxx a = Num[i]; // for (; i < MAXK - 1; i++) // { // Num[i] = Num[i + 1]; // } // Num[MAXK - 1] = a; // } // // long long res = 0; // for (int i = 0; i < n; i++) // { // long long tmp = 0; // for (int j = Num[i].len; j > 0; j--) // { // tmp *= MAXK; // tmp += (long long)Num[i].num[j] * cnt; // tmp %= MOD; // } // cnt--; // res += tmp; // res %= MOD; // } // // cout << "Case #" << ce++ << ": " << res << '\n'; // } // // return 0; //}
Two:
// AC #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; typedef long long ll; const int MAXN = 1e5 + 10; const int MAXK = 26; const int MOD = 1e9 + 7; struct node { int pos; char num[MAXN]; } Num[MAXK + 1]; int vis[MAXK]; bool cmp(node &A, node &B) { for (int i = MAXN - 1; i > 0; i--) { if (A.num[i] != B.num[i]) { return A.num[i] < B.num[i]; } } return A.num[0] < B.num[0]; } int n; char str[MAXN]; int main() { int ce = 1; while (~scanf("%d", &n)) { for (int i = 0; i < MAXK; i++) { vis[i] = 0; Num[i].pos = i; for (int j = 0; j < MAXN; j++) { Num[i].num[j] = 0; } } int x, y; for (int i = 0; i < n; i++) { scanf("%s", str); int len = (int)strlen(str); if (len > 1) // 前置标记 { vis[str[0] - 'a'] = 1; } for (int j = 0 ; j < len; j++) { x = str[j] - 'a'; y = len - j - 1; Num[x].num[y]++; while (Num[x].num[y] == MAXK) { Num[x].num[y++] = 0; Num[x].num[y]++; } } } sort(Num, Num + MAXK, cmp); int op = -1; ll ans = 0, tmp, mul; for (int i = 0; i < MAXK; i++) { if (vis[Num[i].pos] == 0) { op = i; break; } } for (int i = 0; i < MAXK; i++) { tmp = 0; mul = 0; if (i == op) { mul = 0; } else if (i < op) { mul = i + 1; } else { mul = i; } for (int j = MAXN - 1; j >= 0; j--) { tmp = (tmp * MAXK) % MOD; tmp = (tmp + (ll)Num[i].num[j] * mul) % MOD; } ans = (ans + tmp) % MOD; } printf("Case #%d: %lld\n", ce++, ans); } return 0; }
相关文章推荐
- HDU 6043 (2017 多校训练赛1 1002) Balala Power!
- HDU 2017 多校联合训练赛1 1002 6034 Balala Power 排序
- 2017 杭电多校联赛 1002 Balala Power!(数字替换字母)HDU 6034
- HDU 2017 多校联赛 1002 Balala Power!
- HDU6034 Balala Power!(贪心,坑!!!)(2017 HDU多校联赛第一场)
- 17 多校 - 1 - 1002 - Balala Power! (HDU 6034)
- HDU 6034 Balala Power! 2017多校1.2
- 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】
- HDU_【2017 Multi-University Training Contest 1】——1002.Balala Power!
- HDU-2017 多校训练赛6-1002-Mindis
- 2017 多校训练第一场 HDU 6034 Balala Power!
- 2017 HDU 多校联合赛 Balala Power!
- HDU-2017 多校训练赛7-1002-Build a tree
- 2017 多校训练 1002 Balala Power!
- HDU 2017多校联赛-1012 Balala Power!
- HDU-2017 多校训练赛8-1002-Battlestation Operational
- (2017多校训练第一场)HDU - 6034 Balala Power! 贪心
- HDU-2017 多校训练赛9-1002-Ch’s gift
- HDU 6034-(2017多校第一场 Balala Power!)(贪心)
- HDU-2017 多校训练赛9-1005-FFF at Valentine