获取敌情

在公元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. java常见日期格式转换以及日期的获取

    package com.test.TestBoot.SingleModel;import java.text.SimpleDateFormat;import java.util.Date;public ...

  2. js 技巧 (十)广告JS代码效果大全 【1】

    广告JS代码效果大全 1.[普通效果]     现在很多网站广告做的如火如荼,现在我就来介绍一下常见的对联浮动广告效果的代码使用方法,介绍的这种效果,在1024*768分辨率下正常显示,在800*60 ...

  3. <input type="button" /> 和<input type="submit" /> 的区别

    <input type="button" /> 这就是一个按钮.如果你不写javascript 的话,按下去什么也不会发生.<input type="s ...

  4. hdu 1698区间延迟更新

    #include<stdio.h> #define N 100100 struct node { int x,y,yanchi; }a[N*4];//注意数组范围 void build(i ...

  5. 在子线程中更新UI,只能使用Handler

    package com.pingyijinren.test; import android.os.Handler; import android.os.Message; import android. ...

  6. P1614 爱与愁的心痛

    洛谷——P1614 爱与愁的心痛 题目背景 (本道题目隐藏了两首歌名,找找看哪~~~) <爱与愁的故事第一弹·heartache>第一章 <我为歌狂>当中伍思凯神曲<舞月 ...

  7. spring history &design Philosophy

    Spring简介 Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的.Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情.然而, ...

  8. redhat 6 配置 yum 源

    1.删除redhat原有的yum rpm -aq|grep yum|xargs rpm -e --nodeps 2.下载yum安装文件 注意,如果下载时找不到文件,就登录到:http://mirror ...

  9. JSP的过滤器

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/writing-filters.html: Servlet和JSP过滤器都是Java类,可以在Servle ...

  10. Google Kaptcha验证码的使用

    原文:http://www.kailing.pub/article/index/arcid/92.html Kaptcha是什么? kaptcha 是谷歌开源的非常实用的验证码生成工具,基于Simpl ...