获取敌情

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

Input

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

Output

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

Sample Input

  1. 6
  2. ACDBCB

Sample Output

  1. ABCBCD

Solution

靠,历时悠久

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

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

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

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

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

福利数据

这个是我拍了10w组WA的

7
dadeadd

daddade

Code

  1. // This file is made by YJinpeng,created by XuYike's black technology automatically.
  2. // Copyright (C) 2016 ChangJun High School, Inc.
  3. // I don't know what this program is.
  4.  
  5. #include <iostream>
  6. #include <cstring>
  7. #include <cstdio>
  8. using namespace std;
  9. typedef long long LL;
  10. const int MAXN=1010;
  11. char s[MAXN];
  12. int main()
  13. {
  14. freopen("1871.in","r",stdin);
  15. freopen("1871.out","w",stdout);
  16. int n;
  17. while(~scanf("%d",&n)){
  18. scanf("%s",s);
  19. int l=0,r=n-1;
  20. while(l<r){
  21. while(l<=r&&s[l]<s[r])
  22. putchar(s[l++]);
  23. while(l<=r&&s[l]>s[r])
  24. putchar(s[r--]);
  25. if(s[l]==s[r]){
  26. int x=l+1,y=r-1;
  27. if(l==r)break;
  28. while(s[x]==s[y]&&y-x>=3&&s[x]<=s[x-1])x++,y--;
  29. if(s[y]<s[r]&&s[y]<s[x])
  30. for(int i=r;i>=y;i--)putchar(s[i]),r=y-1;
  31. else if(s[x]<s[l]&&s[x]<s[y])
  32. for(int i=l;i<=x;i++)putchar(s[i]),l=x+1;
  33. else if(s[x]<s[y])
  34. for(int i=l;i<x;i++)putchar(s[i]),l=x;
  35. else for(int i=r;i>y;i--)putchar(s[i]),r=y;
  36. }
  37. }if(l==r)putchar(s[l]);printf("\n");
  38. }
  39. return 0;
  40. }

  this is good

  1. // This file is made by YJinpeng,created by XuYike's black technology automatically.
  2. // Copyright (C) 2016 ChangJun High School, Inc.
  3. // I don't know what this program is.
  4.  
  5. #include <iostream>
  6. #include <cstring>
  7. #include <cstdio>
  8. using namespace std;
  9. typedef long long LL;
  10. const int MAXN=1010;
  11. char s[MAXN];
  12. int main()
  13. {
  14. freopen("1871.in","r",stdin);
  15. freopen("1871.out","w",stdout);
  16. int n;
  17. while(~scanf("%d",&n)){
  18. scanf("%s",s);
  19. int l=0,r=n-1;
  20. while(l<r){
  21. while(l<=r&&s[l]<s[r])
  22. putchar(s[l++]);
  23. while(l<=r&&s[l]>s[r])
  24. putchar(s[r--]);
  25. if(s[l]==s[r]){
  26. int x=l+1,y=r-1;
  27. if(l==r)break;
  28. while(s[x]==s[y]&&y-x>=3&&s[x]<=s[x-1])x++,y--;
  29. if(s[x]<s[y])
  30. for(int i=l;i<x;i++)putchar(s[i]),l=x;
  31. else for(int i=r;i>y;i--)putchar(s[i]),r=y;
  32. }
  33. }if(l==r)putchar(s[l]);printf("\n");
  34. }
  35. return 0;
  36. }

  

【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. [Python3网络爬虫开发实战] 1.6.1-Flask的安装

    Flask是一个轻量级的Web服务程序,它简单.易用.灵活,这里主要用来做一些API服务. 1. 相关链接 GitHub:https://github.com/pallets/flask 官方文档:h ...

  2. 零基础入门学习Python(14)--字符串:各种奇葩的内置方法

    前言 这节课我们回过头来,再谈一下字符串,或许我们现在再来谈字符串,有些朋友可能觉得没必要了,甚至有些朋友就会觉得,不就是字符串吗,哥闭着眼也能写出来,那其实关于字符串还有很多你不知道的秘密哦.由于字 ...

  3. JavaScript小技巧整理篇(非常全)

    能够为大家提供这些简短而实用的JavaScript技巧来提高大家编程能力,这对于我来说是件很开心的事.每天仅花上不到2分钟的时间中,你将可 以读遍JavaScript这门可怕的语言所呈现给我们的特性: ...

  4. buf.fill()

    buf.fill(value[, offset[, end]][, encoding]) value {String} | {Buffer} | {Number} offset {Number} 默认 ...

  5. CUDA_one

    首先我看了讲解CUDA基础部分以后,大致对CUDA的基本了解如下: 第一:CUDA实行并行化的过程分为两部分,一个是线程块之间的并行(这是在每个线程网格中grid进行的),一个是对于每一个线程块内部各 ...

  6. 关于java post get请求Demo (请求c#iis接口)

    废话不多说,直接上代码 package dxq.httpGetDemo; import java.io.ByteArrayOutputStream; import java.io.InputStrea ...

  7. JavaScript学习---简易图片轮播

    效果如下: 图片定时轮播 点击左右控制显示下一张或上一张图片 index.html文件 <html> <head> <title> js编写实现幻灯片效果 < ...

  8. python 几种点积运算方式效率分析

    本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/51793984 本文列举出几种pytho ...

  9. 搭桥(codevs 1002)

    题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...

  10. Bootstrap官网文档查询

    Ctrl+F 在出现的小搜索框里面输入要查找的东西.回车即可!