题解 | 小红的排列构造②
小红的排列构造②
https://www.nowcoder.com/practice/a4ec29e74aaa450aa8a4200fe3b06308
说真的最开始真没看懂,又没规定我输出一定得是n以内的数还是试出来 的
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(0);
int n;
cin>>n;
vector<int> a,pos;
string s;
cin>>s;
s = "0"+s;
int x = s.find("1");
for(int i=1;i<s.size();i++){
if(s[i]=='1') pos.push_back(i);
}
if(s[n]=='0'){
cout<<-1<<"\n";
}else if(x!=-1){
for(int i=0;i<pos.size();i++){
if(i==0) {
for(int j=pos[i];j>=1;j--){
a.push_back(j);
}
}else{
int cnt = pos[i]-pos[i-1];
for(int j=pos[i];cnt>0;cnt--,j--){
a.push_back(j);
}
}
}
for(int i=0;i<a.size();i++){
cout<<a[i]<<" ";
}
if(a.size()<n){
for(int i=1;i<=n-a.size();i++){
cout<<i<<" ";
}
}
cout<<endl;
}
}
// 64 位输出请用 printf("%lld")
