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';
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/qieqiemin/p/10230265.html