// #牛客春招刷题训练营# https://www.nowcoder.com/discuss/726480854079250432 #include <iostream> #include <vector> using namespace std; int main() { int n; string s; cin >> n >> s; int size = s.size(); vector<int> a, b(size); for (int i = 0; i < size; i++) b[i] = i + 1; bool flag = 0; flag = (s[0] - '0');//--------n>=1,用于标记当前元素是1还是0,《true》表示1 int i = 0; char last = s[0]; int num; size = 0; while(i < n){ num = 0; while(i < n && s[i] == last){ i++; num++; } a.push_back(num); size++; if (i < n) last = s[i]; } int index = 0; auto shuffle = [&](int ind, size_t lenth){//-----顺时针转一圈使其不能构成排列 int temp = b[ind]; for (int j = ind; j < ind + lenth - 1; j++){ b[j] = b[j + 1]; } b[ind + lenth - 1] = temp; }; for(int j = 0; j < size; j++){ if (flag){ void(); } else{ if (j == size - 1){//-----如果0在最后面则必然不能实现题意 cout << -1; return 0; } shuffle(index, a[j] + 1); } index += a[j]; flag = !flag; } for (int i = 0; i < b.size(); i++){ cout << b[i] << " "; } } // 64 位输出请用 printf("%lld")