- 题意:
- 给一个01构成的字符串,要把该字符串切分成最少的份数,使得每一个字符串都是循环移位
- 字典序最小的字符串。
- 111011110 -> 111 01111 0
- 题解:
- 从后往前遍历,暴力求是否满足
- 代码:
#include <bits/stdc++.h> using namespace std; #define ll long long bool ok(string s) { int l = s.length(); for(int i=1;i<l;i++) { for(int j=0;j<l;j++){ if(s[j] < s[(i+j)%l]) break; if(s[j] > s[(i+j)%l]) return false; } } return true; } int main() { int t; string s; scanf("%d",&t); while(t--) { cin>>s; int l = s.length(); int i=0; while(i < l) { for(int j=l-i;j>0;j--) { if(ok(s.substr(i,j))){ cout<<s.substr(i,j); i+=j; if(i < l) cout<<" "; break; } } } cout<<endl; } return 0; }