字符串依据元素分组 Trie+hash POJ 2408 Anagram Groups
来源:互联网 发布:线程私有数据 编辑:程序博客网 时间:2024/05/24 16:13
http://poj.org/problem?id=2408
题意:
给定若干个字符串,将其分组,按照组成元素相同为一组,输出数量最多的前5组,每组按照字典序输出所。有字符串。数量相同的输出字典序较小的一组。
每个输出时每个字符串只能出现一次。
可以先将所有的字符串利用字典树hash,并利用vector进行保存。
然后对vector进行标号,这样只要对标号进行排序,而不用对vector进行排序。效率大大提高。
#include <iostream>#include <cstring>#include <algorithm>#include <string>#include <vector>#define pb push_back using namespace std;const int maxnode = 50005;const int sigma_size = 26;struct Trie { int ch[maxnode][sigma_size]; int val[maxnode]; int sz, clock; void clear() { clock = sz = 1; memset(ch[0], 0, sizeof(ch[0]));} Trie() { clear(); } int idx(char c) { return c - 'a'; } int hash(const char *s) { int u = 0, n = strlen(s); for(int i = 0; i < n; i++) { int c = idx(s[i]); if(!ch[u][c]) { memset(ch[sz], 0, sizeof(ch[sz])); val[sz] = 0; ch[u][c] = sz++; } u = ch[u][c]; } if(!val[u]) val[u] = clock++; return val[u]; }} trie;int idx[maxnode];vector<string> ans[maxnode];bool cmp(int lhs, int rhs) { if(ans[lhs].size() != ans[rhs].size()) return ans[lhs].size() > ans[rhs].size(); if(ans[lhs].size() != 0) return ans[lhs][0] < ans[rhs][0];}void init() { trie.clear(); for(int i = 0; i < maxnode; i++) ans[i].clear();}string str, save;int main() { ios::sync_with_stdio(false); cin.tie(0); init(); while(cin >> str) { save = str; sort(save.begin(), save.end()); int u = trie.hash(save.c_str()); ans[u].pb(str); } for(int i = 1; i < trie.clock; i++) idx[i] = i; sort(idx+1, idx+trie.clock, cmp); for(int i = 1; i <= 5; i++) { int id = idx[i], size = ans[id].size(); if(size == 0) break; cout <<"Group of size " << size << ": "; sort(ans[id].begin(), ans[id].end()); for(int j = 0; j < size; j++) { if(j == 0 || ans[id][j] != ans[id][j-1]) cout << ans[id][j] << " "; } cout << "." << endl; } return 0;}
0 0
- 字符串依据元素分组 Trie+hash POJ 2408 Anagram Groups
- poj 2408 Anagram Groups(hash)
- poj 2408 Anagram Groups 字符串处理题
- POJ 2408:Anagram Groups
- POJ 2408 Anagram Groups(字典树hash)
- POJ 2408 Anagram Groups 笔记
- POJ 2408 Anagram Groups 字母排序
- POJ 2408 Anagram Groups 排序到极致
- poj----Anagram Groups
- poj——2408——Anagram Groups
- POJ-2408 Anagram Groups-字典序取最大前五
- ZOJ 1960 Anagram Groups(字符串处理)
- POJ 3576 Hash Trie
- Poj 2503 Babelfish (Trie / STL / BKDR Hash)
- poj 2513 Colored Sticks(Trie+hash+dsu)
- POJ 2513(Trie+Hash+Dsu)
- POJ 1200 字符串hash
- poj 1200字符串hash
- 华为oj_学英语_改
- 关于looper,handle,messageQuerry
- 如何制作一面智能镜子
- 库函数perror和strerror的使用
- 转载:iOS开发系列之UITableView实例全面解析
- 字符串依据元素分组 Trie+hash POJ 2408 Anagram Groups
- 零基础学python-19.7 扩展生成器函数
- Node express框架初试
- 使用命令行安装安卓应用
- Quartz2D绘图之阴影
- debian连接网络
- ubuntu firefox install flash
- iOS线程安全
- Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查