?
題意:
將所有字符串變成相等,只允許將最左邊的字符移到最右,問最少要移多少步。
若不能使所有相等,則輸出-1、
?
分別以每一個字符串為模板,將其他的字符串移成和當前字符串相等的情況,再找出步數最少的方案。
?
附AC代碼:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int inf=1<<30; 5 6 string s[60]; 7 8 int main(){ 9 int n,i,j,k,m; 10 cin>>n; 11 for(i=0;i<n;i++){ 12 cin>>s[i]; 13 } 14 int len=s[0].size(); 15 int ans=inf; 16 for(i=0;i<n;i++){ 17 int cnt=0; 18 for(j=0;j<n;j++){ 19 for(m=0;m<len;m++){ 20 for(k=0;k<len;k++){ 21 if(s[i][k]!=s[j][(k+m)%len]) 22 break; 23 } 24 if(k==len)//只有len個都相等才表明移動m個字符后兩字符串相等 25 break; 26 } 27 if(m==len){//若m==len則表明不能匹配。 28 cnt=inf; 29 break; 30 } 31 cnt+=m; 32 } 33 ans=min(ans,cnt); 34 } 35 if(ans==inf) 36 cout<<-1<<endl; 37 else 38 cout<<ans<<endl; 39 return 0; 40 }
?