题意:给定一个字符串 把他分割成最小字符串组成的多个串 数量要求最少
最小字符串:通过旋转(第一个字符到最后面去)得到最小的字符串
比如011 最小是011
010 最小是001
0101 最小是0101
注意这个题 是求最少的分割数量 比赛的时候卡住了 比赛结束3分钟就AC了。。。
其实可以贪心 直接暴力最长的串是不是最小 不是的话ed–(st初始为0 ed初始为s的长度-1) 一直减 直到遇到那个最长的最小字符串 然后更新st为ed+1 ed初始化
以此往复 直到输出全部字符串

#include<algorithm>
#include<iostream>
#include<vector>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<ctime>
#include<map>
#include<stack>
#include<queue>
#include<set>
#include<cstring>
using namespace std;
const int maxn = 1005;
typedef long long ll;
bool judge(string a) {
  if (a.length() == 1) return true;
  int len = a.length();
  string ans = a;
  string b = a;
  for (int i = 0; i < a.length(); i++) {
    char c = a[len - 1];
    a.erase(a.end() - 1);
    a = c + a;
    ans = min(ans, a);
  }
  if (ans == b)
    return true;
  else
    return false;
}
int main() {
  int t;
  cin >> t;
  string s;
  int st, ed;
  while (t--) {
    cin >> s;
    int st = 0, ed = s.length()-1;
    while (st <= ed) {
      if (judge(s.substr(st, ed - st+1)) == true) {
        cout << s.substr(st, ed - st+1)<<' ';
        st = ed + 1;
        ed = s.length() - 1;
      }
      else {
        ed--;
      }
    }
    cout << endl;
  }
  return 0;
}