图片说明
图片说明

  • 题意:
  • 给一个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;
    }