2018.8.19 2018暑假集训之maxnum

昨天去做志愿服务去了没写成Q_Q

今天再来一道

先放题面描述


设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数

设有n个正整数(n<=20),将它们联成一排,组成一个最大的多位数。   例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213   又如:n=4时,4个整数7,13,4,246联接成的最大整数为7424613

程序输入:n 以及n个数

程序输出:n个数联接成的多位数。

样例输入:   4

      7 13 4 246

样例输出:7424613



做了这个题突然感觉所有题目的样例都十分的水

想到字符串从大到小排序输出有没有?

然而这个题正解并不是这样(一个点也过不了)

举个栗子

321和32哪个应该排在前面??

显然32应该排在前面所以不能用字典序排序

然而我们可以换一种排序方法

简而言之就是枚举哪个串放在前面的字典序最大(因为32132和32321位数一样

上代码


#include<iostream>
#include<algorithm>
using namespace std;
string a[150];
int n;
bool flag1;
bool cmp(string,string);
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];//数据太小cin就能过
        if(a[i]!="0")flag1=1;//处理全都是0的情况,避免输出一大堆0(然鹅好像并没有这种数据)
    }
    sort(a+1,a+n+1,cmp);
    if(!flag1)putchar(‘0‘);
    else for(int i=1;i<=n;i++)cout<<a[i];
    return 0;
}
bool cmp(string a,string b)
{
    return a+b>b+a;//这里是重点!!
    //连接两个字符串后得到的两个新串明显位数一样,所以可以直接比较字典序
    //注意大的在前!!
}

满满是坑的一道题啊

大家以后一定想好再写

原文地址:https://www.cnblogs.com/qxds/p/9502242.html

时间: 2024-08-30 09:27:17

2018.8.19 2018暑假集训之maxnum的相关文章

Python学习之路—2018/6/19

Python学习之路-2018/6/19 1.注册自定义转化器 converts.py class Birthday: regex = '[0-9]{8}' # 匹配规则 def to_python(self, value): # 匹配的字符串返回具体的变量值,传递到对应的视图函数中 return int(value) def to_url(self,value): # 反向解析 return "%04d" % value urls.py from django.urls import

实习期间的一些思考整理(6)2018.4.19~4.20

青云诀游戏体验日报-2018.4.19 今日关键点:新老玩家的矛盾 今天试着分析青云诀新老玩家之间矛盾的原因. 1.    利益问题 游戏刚出来时,都希望玩的人多点,所以都会欢迎新人:当游戏到了后期,人数多起来,资源的获取就越发艰难(比如竞技场排行奖励.抢BOSS等),这时候就会发生利益冲突,新老玩家的矛盾就出来了. 2.    追赶机制问题 随着游戏版本的更替,新手要想追上老手的脚步是越来越难的:而对于那些土豪新手,花钱就是为了迅速追平与老手的差距(或者说追上新版本的进度).针对这些问题,游戏

AI Summit(2018.07.19)

AI Summit 时间:2018.07.19地点:北京丽都皇冠假日酒店 原文地址:https://www.cnblogs.com/xuefeng1982/p/10331578.html

暑假集训(2)第五弹 ----- Who&#39;s in the Middle(poj2388)

G - Who's in the Middle Crawling in process... Crawling failed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description FJ is surveying his herd to find the most average cow. He wants to know how much milk this 'median

CSU-ACM2014暑假集训基础组训练赛(1) 解题报告

•Problem A HDU 4450                 水题,签到题 水题..没啥好说的.给大家签到用的. 1 #include <cstdio> 2 int main(){ 3 int n,a,ans; 4 while(scanf("%d",&n),n){ 5 ans = 0; 6 for(int i = 0;i < n;i++){ 7 scanf("%d",&a); 8 ans += a*a; 9 } 10 pr

CSU-ACM暑假集训基础组训练赛(4)解题报告

•Problem A SPOJ SUB_PROB   AC自动机 •题意: 给定一个长为M(M≤100000 )的文本串,和N(N≤1000)个长度不超过2000的模式串,问每个模式串是否在文本串中出现过? •几乎和周一课件上的第一个例题一模一样.. •把文本串丢到AC自动机里面去跑. •注意: •1.可能有两个相同的模式串(略坑吧.) •2.一个模式串可能是另一个模式串的后缀,即如果一个点的fail指针指向的点是一个“危险节点”,那么它本身也是一个“危险节点”. 1 #include <ios

CSU-ACM暑假集训基础组七夕专场

•Problem A Codeforces 20C       最短路(dij,spfa) •题意:给出一张n个点m条边的无向图 (2 ≤ n ≤ 105, 0 ≤ m ≤ 105),输出从1到n的任意一条最短路径. •解法:dijkstra或者spfa,用pre数组记录到达每个点最短距离的前驱结点. •注意:路径的长度范围是 1 ≤ wi ≤ 106,从1到n的最短路径长度可能超出int范围. •没有路径从1到达n时要输出-1 1 #include <cstdio> 2 #include &

暑假集训之专题----拓扑排序题解

第一单: Problem A Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 26   Accepted Submission(s) : 5 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is so h

暑假集训0811

利用树的dfs序解决问题: 就是dfs的时候记录每个节点的进入时间和离开时间,这样一个完整的区间就是一颗完整的数,就转化成了区间维护的问题. 比如hdu3887 本质上是一个求子树和的问题 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <algorithm> 5 #include <iostream> 6 #include <stack>