http://codeforces.com/problemset/problem/798/B
题目大意:给出n个字符串,可以把每个字符串的第一个字符加到字符串最后。问全部相同的话需要的最少操作次数是多少。
解法:因为只有50个字符串,字符串最大长度为50,直接枚举。复杂度O(n^3)
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n, cnt, ans = 0x3f3f3f3f;
string str[55], goal;
bool flag = 1;
scanf("%d", &n);
for(int i = 0; i < n; i++)
cin >> str[i];
goal = str[0];
for(int i = 0; i < goal.size() && flag; i++)
{
char ch = goal[0];
goal.erase(goal.begin());
goal += ch;
cnt = 0;
for(int j = 0; j < n && flag; j++)
{
flag = 0;
for(int k = 0; k < str[j].size(); k++)
{
if(!flag && str[j] == goal)
{
flag = 1;
cnt += k;
}
char t = str[j][0];
str[j].erase(str[j].begin());
str[j] += t;
}
}
if(ans > cnt)
ans = cnt;
}
if(!flag)
cout << "-1" << endl;
else
cout << ans << endl;
return 0;
}