码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3617 Best Cow Line

时间:2018-08-29 14:15:20      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:als   ace   bcd   nbsp   using   pre   class   scanf   namespace   

贪心练习

题目大意:

给定长度为 $len$ 的字符串 $S$ ,要构造一个长度为 $N$ 的字符串 $T$ 。起初 $T$ 是一个空串, 随后反复进行如下操作:从 $S$ 的头部或者尾部删除一个字符加到 $T$ 的尾部, 构造一个字典序尽可能小的字符串 $T$ 

题解:

从字典序的性质, 无论 $T$ 的结尾有多大,只要前面部分尽可能小就可以。按照字典序比较 $S$ 和将 $S$ 反转后的字符串 $S‘$, 如果 $S$ 较小, 从 $S$ 开头取文字追加到 $T$ 末尾 反之从 $S$ 末尾取出文字追加到 $T$ 末尾。字典序比较类的问题经常用得上贪心

样例:

ACDBCB

输出:

ABCBCD

代码:

#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int len;
char S[maxn];

void solve() {
    int a = 0, b = len - 1;
    while(a <= b) {
        bool left = false;
        for(int i = 0; a + i <= b; i ++) {
            if(S[a + i] < S[b - i]) {
                left = true;
                break;
            }
            else if(S[a + i] > S[b - i]) {
                left = false;
                break;
            }
        }
        if(left)
            printf("%c", S[a ++]);
        else
            printf("%c", S[b --]);
    }
    printf("\n");
}

int main() {
    scanf("%s", S);
    len = strlen(S);
    solve();
    return 0;
}

  

 

POJ 3617 Best Cow Line

标签:als   ace   bcd   nbsp   using   pre   class   scanf   namespace   

原文地址:https://www.cnblogs.com/zlrrrr/p/9553071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!