题目链接:http://www.patest.cn/contests/pat-a-practise/1038

题目:

1038. Recover the Smallest Number (30)

时间限制
400 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

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)的更多相关文章

  1. pat 甲级 1038. Recover the Smallest Number (30)

    1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  2. PAT 甲级 1038 Recover the Smallest Number (30 分)(思维题,贪心)

    1038 Recover the Smallest Number (30 分)   Given a collection of number segments, you are supposed to ...

  3. 1038. Recover the Smallest Number (30) - 字符串排序

    题目例如以下: Given a collection of number segments, you are supposed to recover the smallest number from ...

  4. 1038 Recover the Smallest Number (30)(30 分)

    Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...

  5. PAT Advanced 1038 Recover the Smallest Number (30) [贪⼼算法]

    题目 Given a collection of number segments, you are supposed to recover the smallest number from them. ...

  6. 1038 Recover the Smallest Number (30分)(贪心)

    Given a collection of number segments, you are supposed to recover the smallest number from them. Fo ...

  7. PAT 1038 Recover the Smallest Number (30分) string巧排序

    题目 Given a collection of number segments, you are supposed to recover the smallest number from them. ...

  8. PAT甲题题解-1038. Recover the Smallest Number (30)-排序/贪心,自定义cmp函数的强大啊!!!

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789138.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  9. PAT (Advanced Level) 1038. Recover the Smallest Number (30)

    注意前导零的消去. #include <iostream> #include <string> #include <sstream> #include <al ...

随机推荐

  1. jstl 处理字符串函数 substring spli等

    在jstl中的fn标签也是我们在网页设计中经常要用到的很关键的标签,在使用的时候要先加上头 <%@ taglib uri="http://java.sun.com/jsp/jstl/f ...

  2. pgm转jpg

    clc;clear all;for i=1:40for j=1:10image=imread(strcat('N:\FACE\orl_faces\s',...int2str(i),'\',int2st ...

  3. ELK+Filebeat 安装配置入门

    本文地址 http://www.cnblogs.com/jasonxuli/p/6397244.html   https://www.elastic.co 上,elasticsearch,logsta ...

  4. 数据结构及算法篇bsearch crypt lfind lsearch qsort rand srand

    crypt(将密码或数据编码) 相关函数 getpass 表头文件 #define _XOPEN_SOURCE #include<unistd.h> 定义函数 char * crypt ( ...

  5. Objective-C:NSValue类的常见用法

    特殊类型的包装类:数组.结构体(OC内部的.自定义的).指针 // // main.m // 05-NSValue // // Created by ma c on 15/8/17. // Copyr ...

  6. Bridge 桥接模式 MD

    桥接模式 简介 将抽象部分与实现部分分离,使它们都可以独立的变化. 业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色完成的 Bridge模式基于类的最小设计原则,通过使用封装 ...

  7. VUE性能优化总结

    1.v-show,v-if 用哪个? 在我来看要分两个维度去思考问题: 第一个维度是权限问题,只要涉及到权限相关的展示无疑要用 v-if, 第二个维度在没有权限限制下根据用户点击的频次选择,频繁切换的 ...

  8. Back Track 5 之 Web踩点 && 网络漏洞

    Web踩点 CMS程序版本探测 Blindelephant 针对WORDPRESS程序的踩点工具,通过比较插件等一系列的指纹,判断版本. 格式: Python Blindelephant.py [参数 ...

  9. 【Word】Word 2010 设置边框底纹,粘贴漂亮的代码

    参考资料: http://jingyan.baidu.com/article/48206aea1a3401216bd6b310.html http://wenku.baidu.com/link?url ...

  10. 在ubuntu下手机无法挂载的问题

    在ubuntu下手机无法挂载的问题 , 原因之一是,usb数据线连接在了机箱前面,可以尝试连接到机箱后面的USB接口试试,我当时遇到过这样的情况,这样解决的.