题目来自于:2019牛客暑期多校训练营(第七场)A-String
原题:
打牛客比赛有很开心的一点,就是可以交python,虽然c++的泛用性更高,但是写python代码更体现思路
总的来说,这题就是个暴力算法(= = 最近怎么这么多暴力,不过应该都有点技巧性)
上c++代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+200;
string str;
bool check(string x){//暴力直接求这个字符串是否为完美
int n=x.size();
for(int i=0;i<n;i++){
string str1=x.substr(0,i);
string str2=x.substr(i,n-i);
string s=str2+str1;
if(s<x) return 0;
}
return 1;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
cin>>str;
int n=str.size();
for(int i=0;i<n;){
for(int j=n-i;j>0;j--){//从最大的字符串开始,依次向前递减,若符合,输出且向后找
string tmp=str.substr(i,j);
if(check(tmp)){
cout<<tmp<<" ";
i=i+j;
break;
}
}
}
printf("\n");
}
}
python 3代码:
def check(s): # 思路一样
s2 = s
for i in range(len(s)):
s3 = s[i:] + s[:i]
if s3 < s2:
s2 = s3
return s == s2
T = int(input())
for _ in range(T):
s = input()
while s != '':
for i in range(len(s), 0, -1):
if (check(s[:i])):
print(s[:i], end=' ')
s = s[i:]
break
print('')