有点贪心的味道

考虑先满足独特的人,剩下不独特的人,如果数量大于2,则剩下的人轮换一下位置,所有小朋友都满足了需求,再输出

如果数量为1,直接输出

这样保证了满足小朋友的需求最多

#include <bits/stdc++.h>
using namespace std;

vector<int> ans;
vector<int> idx;

int main()
{
    cin.tie(0)->sync_with_stdio(0);
    int n; cin >> n;
    ans.resize(n + 1);

    for (int i = 1; i <= n; ++i){
        char a;
        cin >> a;
        if (a == '0') ans[i] = i;
        else {
            idx.push_back(i);
        }
    }
    int sz = idx.size();
    if (sz == 1)
    {
        ans[idx[0]] = idx[0];
    }
    else if (sz > 1)
    {
        for (int i = 0; i < sz - 1; ++i)
        {
            ans[idx[i]] = idx[i+1];
        }
        ans[idx[sz - 1]] = idx[0];
    }
    for (int i = 1; i <= n; ++i)
    {
        cout << ans[i] << " ";
    }
    return 0;
}