1. 程式人生 > >Mike and strings CodeForces - 798B (簡潔寫法)

Mike and strings CodeForces - 798B (簡潔寫法)

題目連結

 

時間複雜度 O(n*n*|s| )

純暴力,通過string.substr()函式來構造每一個字串平移後的字串。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define
rep(i,x,n) for(int i=x;i<n;i++) #define repd(i,x,n) for(int i=x;i<=n;i++) #define pii pair<int,int> #define pll pair<long long ,long long> #define gbtb std::ios::sync_with_stdio(false) #define MS0(X) memset((X), 0, sizeof((X))) #define MSC0(X) memset((X), '\0', sizeof((X))) #define pb push_back #define
mp make_pair #define fi first #define se second #define gg(x) getInt(&x) using namespace std; typedef long long ll; inline void getInt(int* p); const int maxn=1000010; const int inf=0x3f3f3f3f; /*** TEMPLATE CODE * * STARTS HERE ***/ int n; string getst(string x,int k,int len) { return x.substr(k,len-k)+x.substr(0
,k); } int main() { gg(n); string a[55]; repd(i,1,n) { cin>>a[i]; } int ans=inf; string x=a[1]; int len=x.length(); int flag=0; repd(i,1,n) { int cnt=0; string temp=a[i]; repd(j,1,n) { int k; for( k=0;k<len;k++) { string xin=getst(a[j],k,len); if(xin==temp) { cnt+=k; break; } } if(k==len) { flag=1; break; } } if(flag) { break; } ans=min(ans,cnt); } if(flag) { printf("-1\n"); }else { printf("%d\n",ans ); } return 0; } inline void getInt(int* p) { char ch; do { ch = getchar(); } while (ch == ' ' || ch == '\n'); if (ch == '-') { *p = -(getchar() - '0'); while ((ch = getchar()) >= '0' && ch <= '9') { *p = *p * 10 - ch + '0'; } } else { *p = ch - '0'; while ((ch = getchar()) >= '0' && ch <= '9') { *p = *p * 10 + ch - '0'; } } }