思路:枚举每一个字符串当作目标串 计算其他串移动到该串的次数 取最小即可
用vector的erase和insert 实现的题意操作
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#define max_ 70
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
char tr[max_][max_];
vector<char>v1,v2;
int n;
int main(int argc, char const *argv[])
{
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++)
scanf(" %s",tr[i]);
int l=strlen(tr[1]);
int minn=inf;
for(i=1;i<=n;i++)
{
int cntsum=0;
for(j=1;j<=n;j++)
{
int cnt=0;
if(i!=j)
{
v1.clear();
v2.clear();
for(k=0;k<l;k++)
{
v1.push_back(tr[i][k]);
v2.push_back(tr[j][k]);
}
while(v1!=v2)
{
v2.insert(v2.end(),v2[0]);
v2.erase(v2.begin());
cnt++;
if(cnt>=l)
{
printf("-1\n");
return 0;
}
}
cntsum+=cnt;
}
}
if(cntsum<minn)
minn=cntsum;
}
printf("%d\n",minn );
return 0;
}