HDU-1113-Word Amalgamation
这题比较方便的解法是使用STL里的map和set代码如下:
#include"bits/stdc++.h" using namespace std; map<string,set<string> >mp; string s,t; int main(){ while(cin>>s&&(s!="XXXXXX")){ t=s; sort(s.begin(),s.end()); mp[s].insert(t); } while(cin>>s&&(s!="XXXXXX")){ sort(s.begin(),s.end()); if(mp.count(s)){ for(auto i:mp[s]) cout<<i<<endl; } else puts("NOT A VALID WORD"); puts("******"); } return 0; }
这里再加一种我用字典树和链式前向星胡乱搞出来的解法:
#include"bits/stdc++.h" using namespace std; typedef long long LL; char s[105][10];int tot; char *point[105]; int Next[105];char t[10]; struct tree{ int fir; tree *Next[26]; }*root; bool cmp(char *s,char *t){ return strcmp(s,t)==1; } tree* init(){ tree* n=(tree*)malloc(sizeof(tree)); memset(n->Next,NULL,sizeof(n->Next)); n->fir=-1; return n; } void in(char *t,int id){ tree* now=root; for(int i=0;t[i];i++){ int j=t[i]-'a'; if(!now->Next[j]) now->Next[j]=init(); now=now->Next[j]; } Next[id]=now->fir; now->fir=id; } void out( char *t){ tree* now=root; for(int i=0;t[i];i++){ int j=t[i]-'a'; if(!now->Next[j]){ puts("NOT A VALID WORD"); return; } now=now->Next[j]; } if(~now->fir){ for(int i=now->fir;~i;i=Next[i]) puts(point[i]); } else puts("NOT A VALID WORD"); } int main(){ root=init(); while(scanf("%s",s[tot])&&strcmp(s[tot],"XXXXXX")) point[tot]=s[tot++]; sort(point,point+tot,cmp); for(int i=0;i<tot;i++){ strcpy(t,point[i]); sort(t,t+strlen(t)); in(t,i); } while(scanf("%s",t)&&strcmp(t,"XXXXXX")){ sort(t,t+strlen(t)); out(t); puts("******"); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】Flutter适配HarmonyOS 5知识地图,实战解析+高频避坑指南
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合终身会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解 .NET 结构体字段的内存布局
· .NET 9中的异常处理性能提升分析:为什么过去慢,未来快
· 字符集、编码的前世今生
· Web性能优化:从 2 秒到200毫秒
· WPF 使用GDI+提取图片主色调并生成Mica材质特效背景
· 【故障公告】博客主站遭遇很奇怪的疯狂攻击
· 我与博客园的20年
· 一个老程序员, 两个小时能用corsur做出什么样的东西
· 刚刚,Cursor 1.0炸裂发布!4大亮点实战
· SQL Server 2025 预览版新功能点评