题目来源:牛客网
如果一个单词通过循环右移获得的单词,我们称这些单词都为一种循环单词。
例如:picture 和 turepic 就是属于同一种循环单词。
现在给出n个单词,需要统计这个n个单词中有多少种循环单词。
#include<iostream>
#include<string>
#include<set>
#include<vector>
#include<map>
using namespace std;
void rotates(string &str)
{
char a = str[0];
str.erase(str.begin());
str = str + a;
}
int main()
{
int num;
string cur;
multimap<int, set<string>>group;
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> cur;
int size = cur.size();
auto subgroup = group.find(size);
bool isFind = false;
while (subgroup != group.end())
{
set<string>curgroup = subgroup->second;
if (curgroup.find(cur) != curgroup.end())
{
isFind = true;
break;
}
else
{
subgroup++;
}
}
if (!isFind)
{
set<string>newgroup;
string rotatestr(cur);
//int i = size;
do{
newgroup.insert(rotatestr);
rotates(rotatestr);
//rotate(rotatestr.begin(), rotatestr.begin() + 1, rotatestr.end());
} while (rotatestr != cur);
//} while (i)
pair<const int, set<string>> newpair(size, newgroup);
group.insert(newpair);
}
}
cout << group.size();
cin.get();
cin.get();
return 0;
}