解题思路
将小朋友们按照独特性进行分类。
独特性的全部挪一个位置。
不独特的坐回自己的位置。
代码
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> a,b;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
string s;
int n,i,x=-1,y=0;
cin>>n>>s;
for(i=1;i<=n;++i)
{
if(s[i-1]=='0')
a.emplace_back(i);
else
b.emplace_back(i);
}
for(i=1;i<=n;++i)
{
if(s[i-1]=='0')
{
x=(x+1)%a.size();
cout<<a[x]<<' ';
}
else
{
y=(y+1)%b.size();
cout<<b[y]<<' ';
}
}
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt(),i,x=-1,y=0;
String s=sc.next();
ArrayList<Integer> a=new ArrayList<>();
ArrayList<Integer> b=new ArrayList<>();
for(i=1;i<=n;++i){
if(s.charAt(i-1)=='0')
a.add(i);
else
b.add(i);
}
for(i=1;i<=n;++i){
if(s.charAt(i-1)=='0'){
x=(x+1)%a.size();
System.out.print(a.get(x)+" ");
}else{
y=(y+1)%b.size();
System.out.print(b.get(y)+" ");
}
}
}
}
n=int(input())
s=input()
x=-1
y=0
a,b=[],[]
for i in range(1,n+1):
if(s[i-1]=='0'):
a.append(i)
else:
b.append(i)
for i in range(1,n+1):
if(s[i-1]=='0'):
x=(x+1)%len(a)
print(a[x],end=' ')
else:
y=(y+1)%len(b)
print(b[y],end=' ')
算法及复杂度
- 算法:模拟。
- 时间复杂度: 。
- 空间复杂度: 。