zoukankan      html  css  js  c++  java
  • poi3617Best Cow Line ——贪心法

    给定长度为N(1≤N≤2000)的字符串S,要构造一个长度为N的字符串T。期初,T是一个空串,随后反复进行下列任意操作。

    ·从S的头部删除一个字符,加到T的尾部

    ·从S的尾部删除一个字符,加到T的尾部

    目标是要构造字典序尽可能小的字符串

    提示Input

    · Line 1: 一个整数(integer): N
    · Lines 2~+1: Line i+1 contains a single initial ('A'..'Z') of the string in the ith position in the original line

    Output

    输出时每行最多80个字符

    Sample Input

    6
    A
    C
    D
    B
    C
    B

    Sample Output

    ABCBCD

    AC代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=2005;
    int main()
    {
    char str1[maxn],str2[maxn],w;
    int n;
    cin>>n;
    scanf("%c",&w);
    for(int i=0;i<n;i++)
    scanf("%c%c",&str1[i],&w);
    for(int i=0,j=n-1,k=0;k<n;k++)
    {
    if(str1[i]>str1[j]) str2[k]=str1[j],j--;
    else if(str1[i]<str1[j]) str2[k]=str1[i],i++;
    else //注意首尾相同时的做法
    {
    for(int m=1;;m++)
    {
    if(i+m>=j-m)
    {
    str2[k]=str1[i],i++;
    break;
    }
    if(str1[i+m]<str1[j-m])
    {
    str2[k]=str1[i],i++;
    break;
    }
    if(str1[i+m]>str1[j-m])
    {
    str2[k]=str1[j],j--;
    break;
    }
    }
    }
    }
    for(int i=0,k=0;i<n;i++,k++)
    {
    cout<<str2[i];
    if(k==79) printf(" "),k=-1;
    }
    return 0;
    }


    作者:孙建钊
    出处:http://www.cnblogs.com/sunjianzhao/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    备忘
    跨域问题思考
    个人理解的Lambda表达式的演化过程
    MySql 事务与锁
    Python连接MySQL
    将python虚拟环境移植到无法联网的电脑
    PyQt5+QtDesigner+fbs+python创建桌面程序
    Pycharm+Anaconda安装及配置
    一个极好的JavaScript学习网址
    Python GUI工具Tkinter以及拖拉工具Page安装
  • 原文地址:https://www.cnblogs.com/sunjianzhao/p/11359073.html
Copyright © 2011-2022 走看看