【T^T 1871】获取敌情
获取敌情
在公元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

靠,历时悠久
最开始压根就没管两边相等的情况,直接输出
然后发现有相等的情况,开始各种讨论:
- 字典序最小,放前面的越小越好,然后得出基本思路,从两边开始找小的
- 相等的情况
- 一直是变小(一直相等)的,直到有变大的,一个变大,就输出另外一边
- 两边变大,就找下一个小的那边
- 并且第一种情况,要考虑和另一边第一个的大小
话说我的其实可以不讨论的,直接输出相等的比下一位即可.
还有发一份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】获取敌情的更多相关文章
- 敌情篇 ——DDoS攻击原理
敌情篇 ——DDoS攻击原理 DDoS攻击基础 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的是让指定目标无法提供正常服务,甚至从互联网上消失,是 ...
- 微信企业号 获取AccessToken
目录 1. AccessToken介绍 2. 示例代码 1. AccessToken介绍 1.1 什么是AccessToken AccessToken即访问凭证,业务服务器每次主动调用企业号接口时需要 ...
- salesforce 零基础学习(六十二)获取sObject中类型为Picklist的field values(含record type)
本篇引用以下三个链接: http://www.tgerm.com/2012/01/recordtype-specific-picklist-values.html?m=1 https://github ...
- HTML 获取屏幕、浏览器、页面的高度宽度
本篇主要介绍Web环境中屏幕.浏览器及页面的高度.宽度信息. 目录 1. 介绍:介绍页面的容器(屏幕.浏览器及页面).物理尺寸与分辨率.展示等内容. 2. 屏幕信息:介绍屏幕尺寸信息:如:屏幕.软件可 ...
- 【.net 深呼吸】启动一个进程并实时获取状态信息
地球人和火星人都知道,Process类既可以获取正在运行的进程,也可以启动一个新的进程.在79.77%应用场合,我们只需要让目标进程顺利启动就完事了,至于它执行了啥,有没有出错,啥时候退出就不管了. ...
- WPF 微信 MVVM 【续】修复部分用户无法获取列表
看过我WPF 微信 MVVM这篇文章的朋友,应该知道我里面提到了我有一个小号是无法获取列表的,始终也没找到原因. 前两天经过GitHub上h4dex大神的指导,知道了原因,是因为微信在登录以后,web ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- Android 获取系统相册中的所有图片
Android 提供了API可获取到系统相册中的一些信息,主要还是通过ContentProvider 来获取想要的内容. 代码很简单,只要熟悉ContentProvider 就可以了. public ...
- js获取给定月份的N个月后的日期
1.在讲js获取给定月份的N个月后的日期之前,小颖先给大家讲下getFullYear().getYear()的区别. ①getYear() var d = new Date() console.log ...
随机推荐
- 使用sphinx
SQL 结构化查询语言(是一种标准,所有的关系型数据库Mysql,sqlserver,oracle) sphinx的使用两种方式: 第一种: 使用sphinx的API来操作sphinx (常 ...
- phpstorm破解激活码
一.将“0.0.0.0 account.jetbrains.com”添加到hosts文件中 二.浏览器打开 http://idea.lanyus.com,点击页面中的“获得注册码”,然后在注册时切换至 ...
- 树莓派-3 启用root
默认是user: pi, password: raspberry 通过如下设置root密码并启用 pi@raspberrypi:~ $ sudo passwd root Enter new UNIX ...
- 运维笔记:zabbix的运用(1)安装过程
前言 如果是用了阿里云或者腾讯云,他们都有各种监控帮我们做好.但是如果是遇到了自己维护自己机房的服务器,那么一些可视化或者监控就很有意义了.监控可能有很多种方案,这里就以比较老牌通吃的zabbix来解 ...
- c++基础_杨辉三角形
#include <iostream> using namespace std; int main(){ int n; cin>>n; ][]; ;i<n;i++){ a ...
- poj 3253 Fence Repair (优先队列,哈弗曼)
题目链接:http://poj.org/problem?id=3253 题意:给出n块木板的长度L1,L2...Ln,求在一块总长为这个木板和的大木板中如何切割出这n块木板花费最少,花费就是将木板切割 ...
- cogs1752[boi2007]mokia 摩基亚 (cdq分治)
[题目描述] 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它能 ...
- 分享大牛开发经验,浅谈java程序员职业规划
在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有8年的时间了,在这...... 在中国有很多人都认为I ...
- myeclipse通过数据表生成jpa或hibernate实体---https://blog.csdn.net/partner4java/article/details/8560289
myeclipse通过数据表生成jpa或hibernate实体-----https://blog.csdn.net/partner4java/article/details/8560289
- 《C语言程序设计(第四版)》阅读心得(一)
本篇开始写我个人觉得谭浩强老师的<C语言程序设计(第四版)>中之前没有认识到,或者忘了的知识.因为本科学过,所以有些简单的东西就没有放进来了,所以可能并不是太全面. 第一章程序设计与语言 ...