首页 > 其他分享 >【洛谷P1012】

【洛谷P1012】

时间:2024-02-28 22:22:06浏览次数:18  
标签:洛谷 int StringBuilder list P1012 Integer new append

【洛谷P1012】

题目描述

设有 n 个正整数 ,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。

输入格式
第一行有一个整数,表示数字个数 n。

第二行有 n 个整数,表示给出的 n 个整数

输出格式

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

输入输出样例

输入
3
13 312 343
输出
34331213
输入
4
7 13 4 246
输出
7424613
在这里插入图片描述
我和往常一样,常规暴力先给出来

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n = scanner.nextInt();
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(scanner.nextInt());
        }
        StringBuilder stringBuilder1=new StringBuilder();
        StringBuilder stringBuilder2=new StringBuilder();
        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
            
                int i1 = Integer.parseInt(stringBuilder1.append(o1).append(o2).toString());
                int i2 = Integer.parseInt(stringBuilder2.append(o2).append(o1).toString());
                stringBuilder1.setLength(0);
                stringBuilder2.setLength(0);
                return i2 - i1;
            }
        });
        for (Integer integer : list) {
            System.out.print(integer+"");
        }
    }
}

提交结果如图
在这里插入图片描述

结果貌似不解人意,因为我在之前的程序中用的Integer,所以越界后就无法显示了。
这里给出第二次测试点的
in:20 242649 106199 67383 132060 239784 328762 242068 284094 58019 228909 141929 28083 324219 267730 282481 129414 61352 225677 189648 303624
out:67383613525801932876232421930362428409428248128083267730242649242068239784228909225677189648141929132060129414106199
很明显,如果要使用比较器暴力排序只能用BIgInteger了:
不多说直接放代码


import java.math.BigInteger;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n = scanner.nextInt();
        List<Integer> list=new ArrayList<>();
        for (int i = 0; i < n; i++) {
            list.add(scanner.nextInt());
        }
        StringBuilder stringBuilder1=new StringBuilder();
        StringBuilder stringBuilder2=new StringBuilder();
        list.sort(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                BigInteger i1= new BigInteger(stringBuilder1.append(o1).append(o2).toString());
                BigInteger i2= new BigInteger(stringBuilder2.append(o2).append(o1).toString());
                stringBuilder1.setLength(0);
                stringBuilder2.setLength(0);
                return i2.compareTo(i1);
            }
        });
        for (Integer integer : list) {
            System.out.print(integer+"");
        }
    }
}

在这里插入图片描述

注意:如果将Scanner scanner=new Scanner(System.in);换成 BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(System.in));后用时可能会少一点,减缓了读取的压力

标签:洛谷,int,StringBuilder,list,P1012,Integer,new,append
From: https://www.cnblogs.com/drip3775/p/18042113

相关文章

  • 洛谷P2762 太空飞行计划问题 笔记
    传送门神奇的题目。正解就是源点向实验连边,边权为收益。然后仪器向汇点连边,边权为代价。然后答案就是所有实验收益之和-最小割。考虑证明。首先所有实验收益之和显然对应了做所有的实验。然后考虑割掉一条边。如果割掉的是源点->实验,那么就是不做这个实验。如果割了仪器->汇......
  • 洛谷题单指南-二分查找与二分答案-P2249 【深基13.例1】查找
    原题链接:https://www.luogu.com.cn/problem/P2249题意解读:找有序数组中某个数第一次出现的位置,二分模版题,由于是二分板块的第一题,有必要对二分的各种模版进行介绍。解题思路:关于二分的一切:1、二分的本质二分的本质,是通过某种判定把目标范围划分成两个区间二分问题通常有两......
  • 洛谷题单指南-贪心-P1080 [NOIP2012 提高组] 国王游戏
    原题链接:https://www.luogu.com.cn/problem/P1080题意解读:通过不同的排队方式,让获得最多奖赏的大臣金额尽可能的少。此题如果没有思路,用全排列枚举可以“骗”分,更好的做法直觉上是某种贪心策略,另外基于数据规模考虑,要拿满分,需要上高精度。下面就由浅入深一步一步的解决。解题思......
  • 洛谷题单指南-贪心-P4447 [AHOI2018初中组] 分组
    原题链接:https://www.luogu.com.cn/problem/P4447题意解读:将一个有序的数列,按不重复连续数分成一组,可分成若干组,使得人数最少的组在各种分组方式之中是最大的。解题思路:观察样例说明,有6个测试点的ai​互不相同,因此直接将数据排序,然后连续数分成一组,计算每组数量最少的,即为答案,6......
  • #分块,二分#洛谷 5356 [Ynoi2017] 由乃打扑克
    题目支持区间加和区间查询第\(k\)小分析分块之后给每个整块排序,这样修改的时候整块打标记,散块直接分开把需要加的部分暴力加之后归并,就是\(O(\sqrt{n})\)的查询的话,如果只有散块直接归并出结果,否则二分答案,加上小块合并成的整块,相当于是整体二分,就是\(O(\sqrt{n}\log{a_......
  • 洛谷题单指南-贪心-P4995 跳跳!
    原题链接:https://www.luogu.com.cn/problem/P4995题意解读:消耗最大的体力跳完所有石头,贪心选择问题。解题思路:贪心策略:每次保证有最大的高度差即可,第一次跳到最大高度然后跳到最小高度,再跳到剩下的最大高度,再跳第二小高度,以此类推,直到跳完所有石头。100分代码:#include<bi......
  • 洛谷题单指南-贪心-P1094 [NOIP2007 普及组] 纪念品分组
    原题链接:https://www.luogu.com.cn/problem/P1094题意解读:贪心选择解题思路:贪心策略:将纪念品按价格由小到大排序,优先选择价格大的一直到超过分组价格上限,再选择价格小的直到超过价格上限,此为一组重复以上过程,直到所有数据都遍历到,采用一头一尾双指针即可。证明:如果最大价格......
  • 洛谷 P4198 楼房重建(线段树上二分)
    传送门解题思路动态维护区间里面单调递增斜率的长度需要维护两个信息:上述长度,和区间最大值(合并时需要)难点在于两个子区间的合并。左区间的楼房一定都能看见(没有遮挡),所以要在右区间二分,找到左面最大值lmax在右区间的位置,然后进行合并。复杂度两个log。AC代码#include<ios......
  • 洛谷题单指南-贪心-P1208 [USACO1.3] 混合牛奶 Mixing Milk
    原题链接:https://www.luogu.com.cn/problem/P1208题意解读:就是一个部分背包问题,贪心模版题。解题思路:优先选择单价低的牛奶即可。100分代码:#include<bits/stdc++.h>usingnamespacestd;constintN=5005;structfarmer{intprice,count;}f[N];boolcmp(fa......
  • 洛谷题单指南-贪心-P5019 [NOIP2018 提高组] 铺设道路
    原题链接:https://www.luogu.com.cn/problem/P5019题意解读:最短时间内填满道路,连在一起的不为0的坑可以一起填解题思路:方法1:分治法对于一段连续不同深度的坑,可以最多连续填的天数是最小深度在填满最小深度之后,分别针对其左边和右边的区域再进行填充,这就是此题分治法的理论基......