标签:art %s 最小 element compose world insert pac 相同
Description
Input
Output
Sample Input
undisplayed trace tea singleton eta eat displayed crate cater carte caret beta beat bate ate abet
Sample Output
Group of size 5: caret carte cater crate trace . Group of size 4: abet bate beat beta . Group of size 4: ate eat eta tea . Group of size 1: displayed . Group of size 1: singleton .
Source
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <set> #define MAX 30001 using namespace std; struct group { int num; set<string> gr; group() { num = 0; } }g[MAX]; int trie[MAX * 100][26],to[MAX * 100]; int pos,num; int snum[26]; bool cmp(const group &a,const group &b) {///注意这里 if(a.num == b.num) return *(a.gr.begin()) < *(b.gr.begin()); return a.num > b.num; } void Insert(char *s) { int len = strlen(s); string s1 = s; string s2 = ""; for(int i = 0;s[i];i ++) { snum[s[i] - ‘a‘] ++; } for(int i = 0;i < 26;i ++) { while(snum[i]) { s2 += ‘a‘ + i; snum[i] --; } } int i = 0,c = 0; while(i < len) { int d = s2[i] - ‘a‘; if(!trie[c][d]) trie[c][d] = ++ pos; c = trie[c][d]; i ++; } if(!to[c]) to[c] = ++ num; g[to[c]].gr.insert(s1) ; g[to[c]].num ++; } int main() { char str[100]; while(~scanf("%s",str)) { Insert(str); } sort(g + 1,g + 1 + num,cmp); for(int i = 1;i <= 5;i ++) { printf("Group of size %d:",g[i].num); for(set<string>::iterator it = g[i].gr.begin();it != g[i].gr.end();it ++) { printf(" %s",(*it).c_str()); } puts(" ."); } }
标签:art %s 最小 element compose world insert pac 相同
原文地址:https://www.cnblogs.com/8023spz/p/9629787.html