有点贪心的味道
考虑先满足独特的人,剩下不独特的人,如果数量大于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; }