获取敌情

在公元4484年,人类展开了对外界星球的征途和探索,但也不可避免的展开了和外星人之间的战争。偶然的机遇之下,美国联邦调查局截获了一串来自外星球的信息。但不知道有什么特殊的意义。所以就委托你,人类世界仅存的Acmer来破解这串神秘的信息。
所截获这条信息是长度为N的字符串Str,要重新组合成一个长度同样为N的字符串Ttr。Ttr一开始是一个空串。
重新组合的规则如为:每次从Str的字符串的头部或者尾部去除一个字符,并且接到Ttr的尾部。重复操作,直到Str为空串,Ttr为长度为N的字符串。
破解这条信息的关键在于要构造字典序尽可能小的字符串。
字典序:是指从前到后比较两个字符串大小的方法。首先比较第一个字符。如果不同则第一个字符较小的字符串更小,如果相同继续比较第二个字符串,来比较整个字符串的大小。
加油吧,聪明的Acmer,拯救人类的重担就靠你们了

Input

输入包含多组样例。
首先输入整数N(1<=N<=1000)
然后输入字符串Str(仅含有大写字母)

Output

对于每一组测试案例,在每一行输出破解后的字符串Ttr。

Sample Input

6
ACDBCB

Sample Output

ABCBCD

Solution

靠,历时悠久

最开始压根就没管两边相等的情况,直接输出

然后发现有相等的情况,开始各种讨论:

  1. 字典序最小,放前面的越小越好,然后得出基本思路,从两边开始找小的
  2. 相等的情况
    1. 一直是变小(一直相等)的,直到有变大的,一个变大,就输出另外一边
    2. 两边变大,就找下一个小的那边
    3. 并且第一种情况,要考虑和另一边第一个的大小

话说我的其实可以不讨论的,直接输出相等的比下一位即可.

还有发一份Marris的代码(thank him,借代码拍的),他的做法更简单,不用讨论,相同的就一直相同,考虑第一位不相同的大小决定删哪边(保证最优)→ 每次只删一个,所以不用讨论下一位大小关系

福利数据

这个是我拍了10w组WA的

7
dadeadd

daddade

Code

// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is. #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int MAXN=1010;
char s[MAXN];
int main()
{
freopen("1871.in","r",stdin);
freopen("1871.out","w",stdout);
int n;
while(~scanf("%d",&n)){
scanf("%s",s);
int l=0,r=n-1;
while(l<r){
while(l<=r&&s[l]<s[r])
putchar(s[l++]);
while(l<=r&&s[l]>s[r])
putchar(s[r--]);
if(s[l]==s[r]){
int x=l+1,y=r-1;
if(l==r)break;
while(s[x]==s[y]&&y-x>=3&&s[x]<=s[x-1])x++,y--;
if(s[y]<s[r]&&s[y]<s[x])
for(int i=r;i>=y;i--)putchar(s[i]),r=y-1;
else if(s[x]<s[l]&&s[x]<s[y])
for(int i=l;i<=x;i++)putchar(s[i]),l=x+1;
else if(s[x]<s[y])
for(int i=l;i<x;i++)putchar(s[i]),l=x;
else for(int i=r;i>y;i--)putchar(s[i]),r=y;
}
}if(l==r)putchar(s[l]);printf("\n");
}
return 0;
}

  this is good

// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is. #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL;
const int MAXN=1010;
char s[MAXN];
int main()
{
freopen("1871.in","r",stdin);
freopen("1871.out","w",stdout);
int n;
while(~scanf("%d",&n)){
scanf("%s",s);
int l=0,r=n-1;
while(l<r){
while(l<=r&&s[l]<s[r])
putchar(s[l++]);
while(l<=r&&s[l]>s[r])
putchar(s[r--]);
if(s[l]==s[r]){
int x=l+1,y=r-1;
if(l==r)break;
while(s[x]==s[y]&&y-x>=3&&s[x]<=s[x-1])x++,y--;
if(s[x]<s[y])
for(int i=l;i<x;i++)putchar(s[i]),l=x;
else for(int i=r;i>y;i--)putchar(s[i]),r=y;
}
}if(l==r)putchar(s[l]);printf("\n");
}
return 0;
}

  

【T^T 1871】获取敌情的更多相关文章

  1. 敌情篇 ——DDoS攻击原理

    敌情篇 ——DDoS攻击原理 DDoS攻击基础 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是 ...

  2. 微信企业号 获取AccessToken

    目录 1. AccessToken介绍 2. 示例代码 1. AccessToken介绍 1.1 什么是AccessToken AccessToken即访问凭证,业务服务器每次主动调用企业号接口时需要 ...

  3. salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)

    本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...

  4. HTML 获取屏幕、浏览器、页面的高度宽度

    本篇主要介绍Web环境中屏幕.浏览器及页面的高度.宽度信息. 目录 1. 介绍:介绍页面的容器(屏幕.浏览器及页面).物理尺寸与分辨率.展示等内容. 2. 屏幕信息:介绍屏幕尺寸信息:如:屏幕.软件可 ...

  5. 【.net 深呼吸】启动一个进程并实时获取状态信息

    地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...

  6. WPF 微信 MVVM 【续】修复部分用户无法获取列表

    看过我WPF 微信 MVVM这篇文章的朋友,应该知道我里面提到了我有一个小号是无法获取列表的,始终也没找到原因. 前两天经过GitHub上h4dex大神的指导,知道了原因,是因为微信在登录以后,web ...

  7. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  8. Android 获取系统相册中的所有图片

    Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...

  9. js获取给定月份的N个月后的日期

    1.在讲js获取给定月份的N个月后的日期之前,小颖先给大家讲下getFullYear().getYear()的区别. ①getYear() var d = new Date() console.log ...

随机推荐

  1. CSU 2018年12月月赛 G(2219): Coin

    Description 有这样一个众所周知的问题: 你面前有7个硬币,其中有一个劣质的(它比正常的硬币轻一点点),你有一个天平,问需要你需要使用天平多少次能保证找到那个劣质的硬币. 众所周知的算法是: ...

  2. http返回状态码错误

    415 数据格式不正确 415 Unsupported Media Type 服务器无法处理请求附带的媒体格式 后台用json接收 1.将表单数据转换成json数据 2.设置contentType:& ...

  3. cookie和session的区别及session的生命周期

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录 ...

  4. linux core dump 生成和调试

    core dump 某些信号的产生会导致产生core dump,包含了进程终止时的内存镜像.在某些时候这个core文件就非常的有用处,配合gdb或者lldb调试起来非常方便. 更详细的文档参考 Lin ...

  5. assert.doesNotThrow()

    assert.doesNotThrow(block[, error][, message]) 断言 block 函数不会抛出错误.查阅 assert.throws() 了解更多详情. 当调用 asse ...

  6. AutoEncoders原理

    目录 Auto-Encoders How to Train? Auto-Encoders How to Train?

  7. SQL-Redis使用详细教程

    一.Redis基础部分: 1.redis介绍与安装比mysql快10倍以上 *****************redis适用场合**************** 1.取最新N个数据的操作 2.排行榜应 ...

  8. maven运行出现错误:Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].StandardContext[]](xjl456852原创)

    maven在使用tomcat插件tomcat7-maven-plugin:2.2:run运行项目,出现下面错误: 严重: A child container failed during start j ...

  9. idea 修改Git密码和账号方法

    IDEA修改git账号及密码的方法: 1.file->settings->passwords 2.重启IDEA 3.执行一次提交或更新 当执行提交或更新之后,idea会自动提示输入账号.密 ...

  10. 创建Javaweb项目及MyEclipse视图的配置

    在myEclipse里--右键new--Web Project 视图的配置--Window--Show View-Other在里面输入要找的视图例如(servers)或者直接 Window--rese ...