获取敌情

在公元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. 样例GeoQuiz应用开发 第1章

    1. Activity是Android SDK的Activity类的一个具体实例,负责管理用户和信息屏的交互.应用的功能是通过编写一个Activity子类来实现的.简单的可能只有一个子类,复杂的应用则 ...

  2. centos下安装redis(记录其中踩坑的过程)

    一.先下载到redis-3.0.4.tar.gz包(本文以3.0.4版本为例) 我将这个包放在/opt目录下,在/opt下并解压这个包 tar -zxvf redis-.tar.gz 然后进入redi ...

  3. 源码学习-Object类

    1.Object类是Java所有类的超类 2.查看Object的属性和方法,发现Object类没有属性,只有13个方法,其中7个本地方法. 3.接下来看具体的方法 3.1 Object() 默认的构造 ...

  4. list & dictionary

    list不能直接进行对应,dictionary可以 list用[],dictionary用{}

  5. Linux下安装SVN,仓库创建,用户权限管理

    Exported from Notepad++           Linux下安装SVN,仓库创建,用户权限管理 1.SVN安装 Ubuntu系统下安装:sudoapt-getinstallsubv ...

  6. 7-8 哈利·波特的考试(25 分)(图的最短路径Floyd算法)

    7-8 哈利·波特的考试(25 分) 哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变 ...

  7. 洛谷P2888 [USACO07NOV]牛栏Cow Hurdles

    题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gan ...

  8. 转 POJ分类

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)初期: 一. ...

  9. 洛谷—— P1690 贪婪的Copy

    https://www.luogu.org/problem/show?pid=1690 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地 ...

  10. 高数(A)下 第十二章

    12.1 12.2 12.3  12.4 12.5  12.6 自测题