Problem UVA12265-Selling Land

Accept: 309  Submit: 3231
Time Limit: 3000 mSec

Problem Description

Input

There may be multiple test cases in the input. Each test case will begin with an even integer n (2 ≤ n ≤ 1,000) on its own line. On the next n lines will be names, one per line. Each name will be a single word consisting only of capital letters and will be no longer than 30 letters. The input will end with a ‘0’ on its own line.

Output

For each case, print a single line containing the shortest possible string (with ties broken in favor of the alphabetically smallest) that your host could use to separate her guests. The strings should be printed in all capital letters.

Sample Input

4
FRED
SAM
JOE
MARGARET
2
FRED
FREDDIE
2
JOSEPHINE
JERRY
2
LARHONDA
LARSEN
0

Sample Output

K

FRED

JF

LARI

题解:这个题的细节真的很多,分析之后我采用了如下的方式,首先排序然后取中间两个串这个肯定没啥说的,定义一个ans空串,每次先加入小串的一个字符,如果这个字符小于大串的对应字符,这时答案就能构造出来了,构造方式如下:如果这个字符不是大串的最后一个字符或者这个字符对应的位置(大串-小串)>1,那么如果这个字符不是小串的最后一个字符,ans中该位置的字符++,输出,如果是最后一个,直接输出ans。否则看小串的剩下的字符是否是Z,直到找到一个不是Z的或者到小串的末尾,如果不是Z的字符不是小串的末尾,那么++输出,否则直接输出,如果到了末尾,在后面加一个A输出。这个分支的构造就结束了,如果比到最后也没有找到一个能比出大小的字符,那么就意味着直接输出小串即可。(描述起来太乱,看代码比较好)。

 1 #include<bits/stdc++.h>
 2
 3 using namespace std;
 4
 5 int n;
 6 vector<string> str;
 7
 8 int main()
 9 {
10     //freopen("input.txt", "r", stdin);
11     //freopen("output.txt", "w", stdout);
12     while (~scanf("%d", &n) && n) {
13         str.clear();
14         string tmp;
15         for (int i = 0; i < n; i++) {
16             cin >> tmp;
17             str.push_back(tmp);
18         }
19
20         sort(str.begin(), str.end());
21         string lmid = str[n / 2 - 1], rmid = str[n / 2];
22         int llen = lmid.length(), rlen = rmid.length();
23
24         bool ok = false;
25         int i = 0;
26         string ans = "";
27         while (i < llen && i < rlen) {
28             ans += lmid[i++];
29             if (lmid[i - 1] < rmid[i - 1]) {
30                 if (i != rlen || rmid[i - 1] - lmid[i - 1] != 1) {
31                     if(i != llen) ans[i - 1]++;
32                     cout << ans << endl;
33                     ok = true;
34                     break;
35                 }
36                 else {
37                     while (i < llen) {
38                         ans += lmid[i++];
39                         if (ans[i - 1] != 'Z') {
40                             if (i != llen)ans[i - 1]++;
41                             cout << ans << endl;
42                             ok = true;
43                             break;
44                         }
45                     }
46
47                     if (!ok) {
48                         if(i != llen) ans += 'A';
49                         cout <<ans << endl;
50                         ok = true;
51                     }
52                     break;
53                 }
54             }
55         }
56
57         if (!ok) {
58             cout << lmid << endl;
59         }
60     }
61     return 0;
62 }

转载于:https://www.cnblogs.com/npugen/p/9683233.html

UVA12265-Selling Land(细节处理)相关推荐

  1. UVALive 4950 Selling Land

    在维护高度递增的单调栈中,同时维护周长递增(这一点是很容易证明的),就可以用O(n^2)的复杂度解决了. 代码: #include<bits/stdc++.h> #define fi fi ...

  2. 《算法竞赛入门经典(第2版)》——学习记录

    前言:   这里主要记录本人在学习紫书过程中充分理解过的题目的AC代码,便于以后回顾时查找代码和思路,毕竟看别人的真的有点难懂.此外,本书甚至是本书之外的相关知识学习也可能在此留下记录.   作为一只 ...

  3. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

  4. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

  5. 前端程序员常用的9大构建工具

    构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk).构建包括编译.连接跟把代码打包成可用的或可执行的形式. 在小型项目中,开发者往往手动调用构建过程,这 ...

  6. 无聊猿创始团队卖虚拟土地赚3亿,暴利背后存在哪些问题?

    来源/ft.com 编译/Ivans (原标题:BoredApe creator's next windfall: selling land in an 'open' metaverse) Yuga实 ...

  7. android开发屏幕横放,android-即使从横向旋转到垂直,细节片段也会...

    在一个Activity中,我们称其为MasterActivity,我只想在横向模式下加载媒体播放的细节片段.准备就绪后,媒体将自动启动. 主从流程设置:我有两个xml,activity_master和 ...

  8. matplotlib 设置标注方向_JQData + matplotlib 实现回测日志的交易细节可视化

    前言: 做量化交易的朋友都知道回测的重要性,回测结果是衡量一个量化交易策略是否靠谱的重要依据.回测平台会按历史行情数据模拟成交,并将回测结果汇总成报告. 在很多时候,仅有一份回测的最终结果是不够的.比 ...

  9. 特斯拉电池细节_为什么特斯拉电池日实际上可以辜负炒作

    特斯拉电池细节 重点 (Top highlight) In the midst of a pandemic-led slump for the global auto industry, shares ...

  10. Object-based superresolution land cover Mapping From Remotely sensed imagery

    从网上找了几篇相关专业的论文看了一下,第一篇就是这个,下面主要从论文解决的问题,所提出的方法来简单介绍,可能会有理解不对的地方. 之前的亚像元定位方法是基于像元或者亚像元来做的,那本文的作者就提出了一 ...

最新文章

  1. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]
  2. Layout两列定宽中间自适应三列布局
  3. 东南大学周张泉:基于知识图谱的推理技术 | 实录·Guru Talk
  4. gb酱油和gbt酱油哪个好_都是酱油,生抽好还是味极鲜好?老板:两者差别很大,别买错了...
  5. 光端机安装调试需注意的几大因素
  6. python魔法方法与函数_在Python中画图(基于Jupyter notebook的魔法函数)
  7. 人工智能python课程总结1500字_李开复的《人工智能》读后感1500字
  8. webstore报 ESLint: Expected space or tab after '//' in comment.(spaced-comment)
  9. LayaAr 批量加载资源 LoaderManager
  10. linux系统日志读取,linux系统日志
  11. 基于深度学习的SLAM综述:迈向空间机器智能时代
  12. mingw-w64-i686-toolchain
  13. 笔记本如何解除锁定计算机,笔记本键盘锁定解锁方法教程
  14. 基于锁的并发数据结构:如何给数据结构加锁?
  15. 区块链数据服务 - BDS
  16. 完美解决 请在微信客户端打开链接
  17. PS内存不足恰当解决方法
  18. win10开始菜单打不开_windows10系统电脑开始菜单无法打开的解决教程
  19. html网页里如何竖着打字,搜狗输入法怎么设置为竖排显示 怎样把横向打字变成竖向...
  20. 目标规划问题与LINGO求解

热门文章

  1. 一个学习爱好者,应该怎么学习golang
  2. python类中的self参数和cls参数
  3. Window 浏览器窗口对象
  4. 在Leangoo里怎么修改密码?
  5. 自己应该如何不断学习呢?
  6. iOS 开发中 通过AVAssetWriter将录像视频写到指定文件
  7. 艾伟:C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
  8. 数据恢复公司用人标准
  9. 下载源码并打包生成war包(自己打包dubbo-admin)
  10. html里面怎么引入swiper,JavaScript库——使用swiper.js创建嵌套的swiper