POJ 3617

==> 原题链接

题目概述

反复从给定的字符串的 头 或 尾 取出字母,组成一个字典序最小的新的字符串。注意每80个字符换行。

思路

贪心。每次比较给定字符串和 其顺序颠倒的字符串的字典序,输出即可。

代码

    #include <stdio.h>

int n;
char str[2000 + 10] = "";

void solve();

int main()
{
    int i;

    freopen("data.txt", "r", stdin);
    freopen("data.out", "w", stdout);
    scanf("%d", &n);

    for (i = 0; i < n; i++)
    {
        scanf("%s", str + i);
    }

    solve();

    return 0;
}

void solve()
{
    int i;
    int p = 0, a = 0, b = n - 1, left, right;

    while (a <= b)
    {
        if (a == b)
        {
            printf("%c\n", str[a]);
            break;
        }

        for (i = 0; a + i <= b - i; i++)
        {
            left = a + i;
            right = b - i;

            if (p >= 80)
            {
                printf("\n");
                p = 0;
            }

            if (str[left] != str[right])
            {
                if (str[left] < str[right])
                {
                    printf("%c", str[a]);
                    a++;
                }
                else
                {
                    printf("%c", str[b]);
                    b--;
                }
                p++;
                break;
            }
            else
            {
                if ((left == right) || (right - left == 1))
                {
                    printf("%c", str[a]);
                    a++;
                    p++;
                }
                else
                {
                    continue;
                }
            }
        }
    }
}
添加新评论