首页 > 试题广场 >

小欧安排座位

[编程题]小欧安排座位
  • 热度指数:561 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小欧现在有n个小朋友,同时有n个座位。小欧现在要给他们安排座位,n个小朋友中有一些希望自己是独特的,另一些小朋友则希望自己是不独特的。
当一个小朋友是独特的当且仅当小朋友自身的编号与座位的编号不相等,否则这个小朋友就是不独特的。

现在给你n个小朋友的需求,你需要给他们安排座位,满足尽可能多的小朋友的需求。

输入描述:
第一行一个整数n(1 \leq n \leq 10^5)表示小朋友的数量。
第二行输入一个长度为n只包含 0 和 1 的字符串,第i位若为 1 代表第i个小朋友希望自己是独特的,否则他希望自己是不独特的。


输出描述:
n个用空格隔开的整数,第i个表示第i个小朋友的位置。若有多种安排方案,输出任意一个即可。
示例1

输入

5
00110

输出

1 2 4 3 5

说明

这样安排满足了所有小朋友的需求
示例2

输入

2
01

输出

1 2

说明

只能满足 1 个小朋友的需求
头像 tartarns_yan
发表于 2024-11-20 11:01:16
#include <iostream> using namespace std; int res[100005]; int main() { int n, cnt = 0, pre; cin >> n; string kids; cin > 展开全文
头像 kkkyd
发表于 2024-11-20 20:21:33
#include<bits/stdc++.h> using namespace std; //0就不变,1就都后移一位(都是一的)最后一个放在第一个 int main() { int n; string s; cin>>n; cin>&g 展开全文
头像 Mag1c0nch
发表于 2024-11-21 16:04:18
首先考虑尽可能的满足想换座位的人我们将想换座位的人单独记录下来,然后将其循环打乱,就是给第一个人最后一个人的座位,第二个人第一个人的座位,以此类推发现很像第一天的最后一题,我们维护一个map给每个需要换座位的人自己到自己的映射,然后将其错位swap即可,实现非常的简单 #include <bi 展开全文
头像 努力变强2
发表于 2024-11-19 19:18:31
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll>PII; const int N = 2e5 + 10; const int MOD = 9982 展开全文
头像 周康禧
发表于 2024-11-22 16:30:53
#include <bits/stdc++.h> #include <functional> const int N = 2e5 + 10; const int inf = 0x3f3f3f3f; using namespace std; using ull = unsign 展开全文
头像 宿伞之神
发表于 2024-11-20 00:04:26
将'1'的位置循环右移一位即可。 #include<bits/stdc++.h> #define int long long #define double long double #define x first #define y second using namespace std; 展开全文
头像 Kato_Shoko
发表于 2024-11-20 19:15:39
不独特的人就不独特,直接输出,而独特的人就让他们去坐下一个独特的人的座位就可以了,最后一个独特的人坐第一个人的位置。 #include <iostream> #include <queue> #include <map> #include <set> 展开全文
头像 是基德吖
发表于 2024-11-21 22:03:42
import java.io.*; import java.util.*; import java.math.BigInteger; public class Main { static void solve() { int n = in.nextInt(); 展开全文
头像 予世柔
发表于 2024-11-22 10:36:21
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner sc = 展开全文
头像 welken
发表于 2024-11-19 21:46:04
有点贪心的味道考虑先满足独特的人,剩下不独特的人,如果数量大于2,则剩下的人轮换一下位置,所有小朋友都满足了需求,再输出如果数量为1,直接输出这样保证了满足小朋友的需求最多 #include <bits/stdc++.h> using namespace std; vector< 展开全文