能暴力的水题就不要想别的了
#include<cstdio>
#include<algorithm>
#include<string>
#include<iostream>
using namespace std;
const int N=55;
string s[N],tmp[N][N];
int n,len;
void gettmp(int t) {
tmp[t][0]=s[t];
for(int i=1;i<len;++i) {
tmp[t][i]="";
for(int j=i;j<len;++j) tmp[t][i]=tmp[t][i]+s[t][j];
for(int j=0;j<i;++j) tmp[t][i]=tmp[t][i]+s[t][j];
}
}
int solve() {
int ans=n*len;
for(int i=0;i<len;++i) {
int res=0;
for(int j=1;j<=n;++j) {
int k;
for(k=0;k<len;++k) {
if(tmp[j][k]==tmp[1][i]) break;
}
if(k==len) return -1;
res=res+k;
}
ans=min(ans,res);
}
return ans;
}
int main() {
while(~scanf("%d",&n)) {
///read
for(int i=1;i<=n;++i) cin>>s[i];
///get len
len=s[1].length();
///get tmp
for(int i=1;i<=n;++i) gettmp(i);
///print
printf("%d\n",solve());
}
return 0;
}