zoukankan      html  css  js  c++  java
  • P1012 拼数 字符串

    题目描述

    设有nn个正整数(n≤20)(n20),将它们联接成一排,组成一个最大的多位整数。

    例如:n=3n=3时,33个整数1313,312312,343343联接成的最大整数为:3433121334331213

    又如:n=4n=4时,44个整数77,1313,44,246246联接成的最大整数为:74246137424613

    输入输出格式

    输入格式:

    第一行,一个正整数nn。

    第二行,nn个正整数。

    输出格式:

    一个正整数,表示最大的整数

    输入输出样例

    输入样例#1: 复制
    3
    13 312 343
    
    输出样例#1: 复制
    34331213

    字符串交水的题
    一开始cmp考虑了半天a了
    #include<bits/stdc++.h>
    using namespace std;
    //input
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define inf 0x3f3f3f3f
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    
    bool cmp(string a,string b)
    {
        int lena=a.size();
        int lenb=b.size();
        int i;
        for( i=0;i<min(lena,lenb);i++)
            if(a[i]!=b[i])break;
        if(i!=min(lena,lenb))
            return a[i]>b[i];
        else
        {
            if(lena>lenb)
                return a[ min(lena,lenb) ]>a[0];
            else if(lena<lenb)
                return b[0]>b[min(lena,lenb)];
        }
    }
    int main()
    {
        string s[30];
        int n;
        RI(n);
        rep(i,1,n)
        cin>>s[i];
        sort(s+1,s+1+n,cmp);
        rep(i,1,n)
        cout<<s[i];
        return 0;
    }
    View Code

    但是可以直接加起来进行比较

    #include<bits/stdc++.h>
    using namespace std;
    //input
    #define rep(i,a,b) for(int i=(a);i<=(b);i++)
    #define repp(i,a,b) for(int i=(a);i>=(b);i--)
    #define RI(n) scanf("%d",&(n))
    #define RII(n,m) scanf("%d%d",&n,&m);
    #define RIII(n,m,k) scanf("%d%d%d",&n,&m,&k)
    #define RS(s) scanf("%s",s);
    #define ll long long
    #define inf 0x3f3f3f3f
    #define REP(i,N)  for(int i=0;i<(N);i++)
    #define CLR(A,v)  memset(A,v,sizeof A)
    //////////////////////////////////
    
    bool cmp(string a,string b)
    {
        return a+b>b+a;
    }
    int main()
    {
        string s[30];
        int n;
        RI(n);
        rep(i,1,n)
        cin>>s[i];
        sort(s+1,s+1+n,cmp);
        rep(i,1,n)
        cout<<s[i];
        return 0;
    }
    View Code

    真是智商是硬伤





  • 相关阅读:
    window C/C++ 简单的IDE编译器
    ubuntu 安装 lamp
    架构设计
    linux 性能分析
    wifi基本原理
    openwrt 编译
    学习笔记day5:inline inline-block block区别
    脱离原来文档流产生浮动框
    meta标签清理缓存
    百度web前端面试2015.10.18
  • 原文地址:https://www.cnblogs.com/bxd123/p/10661449.html
Copyright © 2011-2022 走看看