将'1'的位置循环右移一位即可。
#include<bits/stdc++.h> #define int long long #define double long double #define x first #define y second using namespace std; typedef long long LL; typedef long long ll; typedef pair<int,int> PII; const int N=3e5+10; const int M=1e3+10; int mod=1e9+7; int a[N]; void solve(){ int n;cin>>n; string s;cin>>s; s=' '+s; vector<int>ans(n+10); for(int i=1;i<=n;i++) ans[i]=i; vector<int>sp; for(int i=1;i<=n;i++){ if(s[i]=='1') sp.push_back(i); } int cp; if(ans.size()) cp=ans[sp[0]]; for(int i=1;i<sp.size();i++){ ans[sp[i-1]]=ans[sp[i]]; } if(ans.size()) ans[sp.back()]=cp; for(int i=1;i<=n;i++) cout<<ans[i]<<" "; } signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int _; _=1; //cin>>_; while(_--){ solve(); } }