啊啊啊啊……颓了好久了……然而……果然还是只能做一做div2的ab,b做起来都困难啊orz○| ̄|_
题目链接:http://codeforces.com/contest/798/problem/B
唉,这个题写了好久啊,实现起来巨麻烦,看了看大佬的代码发现,同样都是暴力的想法,大佬的代码要简洁的多,果然还是对STL不熟悉么还是其他什么的。
暴力,分别以每个字符串为基准,计算其他几个字符串移动的次数,求最小和即可,这里学到了大佬find的用法,处理起来巨简单,
其实自己原来的代码差不多就把string的find操作粗略的实现了一遍,orz,嘛总之也是学到东西了。
#include<iostream> #include<algorithm> #include<string> #include<string.h> using namespace std; int main() { int n; string s[55]; while(cin>>n) { int ans=0x3f3f3f3f; for(int i=0;i<n;i++) cin>>s[i]; for(int i=0;i<n;i++) { int cnt=0; for(int j=0;j<n;j++) { if(j!=i) { string t=s[j]+s[j]; if(t.find(s[i])==string::npos) //npos就是查找不到的意思的感觉??? { cout<<"-1"<<endl; return 0; } cnt+=t.find(s[i]); } } ans=min(ans,cnt); } cout<<ans<<endl; } return 0; }