zoukankan      html  css  js  c++  java
  • CF1009B Minimum Ternary String

    CF1009B Minimum Ternary String

    洛谷传送门

    题目描述

    给定一个由 '0', '1', '2' 组成的字符串 SSS 。可以交换相邻'0', '1'或'1', '2'的位置(例如:'12' - '21'   ; '01' - '10')请输出原字符串经过任意转换后字典序最小的字符串。原字符串长度不超过 10510^5105 。

    输入格式

    字符串 SSS


    题解:

    一看就是推性质的题。要说是贪心其实也可以。

    0要靠前,1尽可能在2前面,2靠后。

    然后看怎么移动。

    发现如果2后面有0,这个0打死也动不到这个2的前面,因为到后面就截止了。

    发现1非常自由,可以到序列的任何一个位置。

    那么贪心思路就是:保留0、2,把所有的1放到第一个2的前面。

    有这个思路就好办了。

    剩下的是一些细节。

    代码:

    #include<cstdio>
    #include<cstring>
    using namespace std;
    const int maxn=1e5+5;
    char a[maxn];
    bool flag;
    int pos,cnt;
    int main()
    {
        scanf("%s",a+1);
        int len=strlen(a+1);
        for(int i=1;a[i];i++)
        {
            if(a[i]=='1')
                cnt++;
            if(a[i]=='2'&&!flag)
            {
                flag=1;
                pos=i;
            }
        }
        if(cnt==len)
        {
            for(int i=1;a[i];i++)
                printf("%c",a[i]);
            return 0;
        }
        for(int i=1;a[i];i++)
        {
            if(a[i]=='1')
                continue;
            else if(i==pos)
                for(int j=1;j<=cnt;j++)
                    printf("1");
            printf("%c",a[i]);
        }
        if(!pos)
            for(int j=1;j<=cnt;j++)
                    printf("1");
        return 0;
    }
    
  • 相关阅读:
    ASP.NET伪静态配置
    拖动条控件 (UISlider)
    进度环控件 (UIActivityIndicatorView)
    进度条控件 (UIProgressView)
    图像控件 (UIImageView)
    分段控件 (UISegmentedControl)
    CocoaPods安装和使用教程
    iOS 在UILabel显示不同的字体和颜色
    iOS开源项目(新)
    iOS开源项目(旧)
  • 原文地址:https://www.cnblogs.com/fusiwei/p/14012409.html
Copyright © 2011-2022 走看看