-
How many
HDU - 2609 - 思路:任何一个字符串环,最小表示都是唯一的。求出 n 个字符串环的最小表示,set统计种类即可。
-
#include<bits/stdc++.h> using namespace std; #define maxn 12345 set<string>ok; string hk; char str[maxn]; int t,len; int getmin() { int i=0,j=1,k=0; while(i<len&&j<len&&k<len) { int cp=str[(i+k)%len]-str[(j+k)%len]; if(!cp)k++; else { if(cp>0)i+=k+1; else j+=k+1; if(i==j)j++; k=0; } } return i>j?j:i; } int main() { while(~scanf("%d",&t)) { ok.clear(); for(int i=1; i<=t; i++) { hk.clear(); scanf("%s",str); len=strlen(str); int id=getmin(); for(int i=id; i<id+len; i++) hk+=str[i%len]; ok.insert(hk); } printf("%d\n",ok.size()); } return 0; }
How many HDU - 2609 -最小表示法
最新推荐文章于 2022-04-13 15:22:58 发布
本文介绍了一种算法,用于找出字符串环的最小表示形式,并通过使用set集合统计不同表示形式的数量,解决了HDU-2609题目中字符串环种类计数的问题。该算法首先确定环的起始位置,然后构建最小表示形式并插入到集合中,最终集合的大小即为不同字符串环的种类数量。
11万+

被折叠的 条评论
为什么被折叠?



