CodeForces 1009B Minimum Ternary String
题意:
输入一串数,0与1可以互换,1与2可以互换,将这串数换成等长最小的数。
题解:
1可以和另外两种数都换位,记录1的个数,
有2就将1全部放在第一个2之前,以求2尽量靠后,2与0相对位置不变;
没有2就将1放在末尾,让所有0靠前;
注意可以将201换成120。
#include<cstdio>
using namespace std;
int main()
{
char s[N];
int n=0,n1=0,n2=0;;
while(scanf("%c",&s[n])&&s[n]!='\n'){
if(s[n]=='1')n1++;
if(s[n]=='2')n2++;
n++;
}
bool ok=true;
for(int i=0;i<n;i++){
if(ok&&s[i]=='2'){
for(int j=0;j<n1;j++)printf("1");
ok=false;
}
if(s[i]!='1')
printf("%c",s[i]);
}
if(ok)for(int j=0;j<n1;j++)printf("1");
printf("\n");
}