题解 | 小欧安排座位

小欧安排座位

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")
//活动地址: 牛客春招刷题训练营 - 编程打卡活动

全部评论

相关推荐

MGlory:我当初有一个老师告诉我简历要写的简单,最好只一面,项目可以写核心的,进面了自然会问你的
点赞 评论 收藏
分享
群星之怒:不是哥们,你就不好奇瘫痪三十年的老植物人是啥样的吗?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务