1038. Recover the Smallest Number (30)
题目链接:http://www.patest.cn/contests/pat-a-practise/1038
题目:
1038. Recover the Smallest Number (30)
Given a collection of number segments, you are supposed to recover the smallest number from them. For example, given {32, 321, 3214, 0229, 87}, we can recover many numbers such like 32-321-3214-0229-87 or 0229-32-87-321-3214 with respect to different orders
of combinations of these segments, and the smallest number is 0229-321-3214-32-87.
Input Specification:
Each input file contains one test case. Each case gives a positive integer N (<=10000) followed by N number segments. Each segment contains a non-negative integer of no more than 8 digits. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print the smallest number in one line. Do not output leading zeros.
Sample Input:
5 32 321 3214 0229 87
Sample Output:
22932132143287
分析:
输出几个数字字符串,输出其组合数的最小值,最简单的当然是穷举然后排序了,可是太暴力了,我们要反对暴力。
应该先对字符串进行一个排序。然后直接组合后输出就可以。这里的比較函数是一个难点。
注意到234<2343, 234 > 2341。所以假设两个字符串比較,较短字符串比較完后还要进行循环比較直到较长字符的末尾(即要取%接着比較)
要注意输入都为0的情况。也注意一下string的erase的使用方法
AC代码:
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string>
#include<vector>
using namespace std;
vector<string>V;
bool cmp1(string A, string B){//核心的比較函数
if (A.size() > B.size()){
for (int i = 0; i < A.size(); i++){
if (A[i] != B[i % B.size()])//当较短字符串比較完了之后。还要循环继续比較到较长字符串的末尾,由于234是小于2343的。可是是大于2341的。
return A[i] < B[i % B.size()];
}
}
else{
for (int i = 0; i < B.size(); i++){
if (A[i % A.size()] != B[i])
return A[i % A.size()] < B[i];
}
}//make sure that A is no longer than B
}
int main(){
//freopen("F://Temp/input.txt", "r", stdin);
string tmp;
int n;
cin >> n;
for (int i = 0; i < n; i++){
cin >> tmp;
V.push_back(tmp);
}
sort(V.begin(), V.end(), cmp1);
string str;
for (int i = 0; i < V.size(); i++){
str += V[i];
}
int idx = 0;
while (str[idx] == '0')idx++;
str.erase(0, idx);//要把首部的0给去除掉
if (str.size() == 0)cout << "0" << endl;//假设一个数字也没有,输出0
else cout << str << endl;
return 0;
}
截图:
——Apie陈小旭
1038. Recover the Smallest Number (30)的更多相关文章
- pat 甲级 1038. Recover the Smallest Number (30)
1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...
- PAT 甲级 1038 Recover the Smallest Number (30 分)(思维题,贪心)
1038 Recover the Smallest Number (30 分) Given a collection of number segments, you are supposed to ...
- 1038. Recover the Smallest Number (30) - 字符串排序
题目例如以下: Given a collection of number segments, you are supposed to recover the smallest number from ...
- 1038 Recover the Smallest Number (30)(30 分)
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- PAT Advanced 1038 Recover the Smallest Number (30) [贪⼼算法]
题目 Given a collection of number segments, you are supposed to recover the smallest number from them. ...
- 1038 Recover the Smallest Number (30分)(贪心)
Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...
- PAT 1038 Recover the Smallest Number (30分) string巧排序
题目 Given a collection of number segments, you are supposed to recover the smallest number from them. ...
- PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- PAT (Advanced Level) 1038. Recover the Smallest Number (30)
注意前导零的消去. #include <iostream> #include <string> #include <sstream> #include <al ...
随机推荐
- iptables只允许指定ip地址访问指定端口
首先,清除所有预设置 iptables -F#清除预设表filter中的所有规则链的规则 iptables -X#清除预设表filter中使用者自定链中的规则 其次,设置只允许指定ip地址访问指定端口 ...
- MySQL必会的28条经典查询
MySQL必会的28条经典查询 原创作品.转载请注明出处https://blog.csdn.net/kk123k 表结构及测试数据请看我上一篇文章:学生选修成绩表测试数据 Student(Sno, ...
- C语言的32个保留字
auto :声明自动变量 double :声明双精度变量或函数 int: 声明整型变量或函数 struct:声明结构体变量或函数 break:跳出当前循环 else :条件语句否定分支(与 if 连用 ...
- 泛泰A870(高通600 cpu 720p) 刷4.4专用中文recovery TWRP2.7.1.1版(三版通刷)
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- 运行时类型识别RTTI
1.RTTI的工作原理 例1. 用Class加载对象示例. package RTTI; public class Candy { static{ System.out.println("Lo ...
- Median of Two Sorted Array leetcode java
题目: There are two sorted arrays A and B of size m and n respectively. Find the median of the two sor ...
- jquery圆角插件
为了实现div的圆角效果,你还在用古老的背景图片拼凑的方法吗?还是在用各种浏览器不互相兼容的CSS方式?如果你还在用这样的方式实现圆角,那我告诉你你真的out了,或许是我out了,竟然以前没发现有这样 ...
- 安装Oracle之后解决掉的问题分享
TNS-03505: 无法解析名称 在测试tnsping的时候始终显示这么个问题. ...
- WPF DataTrigger的两个用法
1.用在textbox等输入控件上,验证输入是否合法.首先定义一个Converter, 2.Xaml里面这样子写,意思是输入的数字,如果小于100则显示为红色. 3.combox等列表控件里面,也可以 ...
- connect-proxy rpm文件的安装
1. rpm文件下载 http://rpm.pbone.net/index.php3?stat=3&search=connect-proxy&srodzaj=3 2. rpm的安装 h ...