题解 | 小欧安排座位
小欧安排座位
https://www.nowcoder.com/practice/f90a4314d03f434f93f54b918304f97e
//活动地址: 牛客春招刷题训练营 - 编程打卡活动 #include<bits/stdc++.h> #include <iostream> using namespace std; #define int long long const int N = 100000; // int a[10] = {0}; // bool check(int x) { // char c = '0'; // memset(a, 0, sizeof(a)); // string ss = to_string(x); // while (ss.size() < 5) // ss = c + ss; // for (int i = 0; i < 5; i++) { // a[ss[i] - '0']++; // if (a[ss[i] - '0'] > 1) // return 0; // } // return 1; // } int dd[N],bb[N]; signed main() { ios::sync_with_stdio(); cin.tie(0); cout.tie(0); int n, q; string s; cin>>n; cin>>s; int b=0,d=0; // 先把特别的小盆友 单独用dd存储起来 for(int i=0;i<n;i++) { if(s[i]!='0') dd[d++]=i+1; } // 如果只有一个 那就直接输出 if(d==1) { for(int i=0;i<n;i++) cout<<i+1<<" "; return 0; } // 如果是奇数个的话 就需要先交换个位置 不然翻转回来 会有一个一样 if(d&1) { int b=dd[0]; dd[0]=dd[d/2]; dd[d/2]=b; } d--; // 直接倒着输出 for(int i=0;i<n;i++) { if(s[i]=='1') cout<<dd[d--]<<" "; else cout<<i+1<<" "; } return 0; } // 64 位输出请用 printf("%lld") //活动地址: 牛客春招刷题训练营 - 编程打卡活动