首页 > 其他分享 >20241024每日一题洛谷P1012

20241024每日一题洛谷P1012

时间:2024-10-25 21:49:13浏览次数:7  
标签:sort 洛谷 string 整数 P1012 numbers 字符串 20241024 cmp

普及-洛谷P1012 拼数

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

输入:

第一行有一个整数,表示数字个数 n

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

输出:

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

可以考虑两种路线:使用sort函数编辑cmp参数进行字符串拼接排序、使用字符串基数排序最高位优先(msd)

首先解释第一种方法:

我们需要知道这一条规则,假设有字符串 a,b,他们首位拼接最简单的办法:

直接使用+运算符

string a = "hello ";
string b = "world!";
string c = a + b;

其中 c 就是以 a 为开头 b 为结尾的拼接后的字符串

再来配置cmp参数:

bool cmp (string a,string b){
	return a + b > b + a;
}

这段函数表示,返回a+bb+a两者之中的最大值

补充:字符串的比较规则

从左到右逐字符比较,第一个不同的字符决定大小,如果一个字符串是另一个字符串的前缀,则较短的字符串更小

最后使用sort函数完成排序

sort(numbers.begin(), numbers.end(), cmp);

关于cmp函数的优化方案(无O2优化的情况下)

传值时直接传入地址,避免复制的操作:

bool cmp (string &a,string &b){
	return a + b > b + a;
}

完整代码如下:

// 自定义比较函数
bool cmp(const string &a, const string &b) {
    return a + b > b + a;
}
int main() {
    int n;
    cin >> n;
    vector<string> numbers(n);
    for (int i = 0; i < n; i++) cin >> numbers[i];
    sort(numbers.begin(), numbers.end(), cmp);
    for (const auto &num : numbers) cout << num;//遍历vector容器
    return 0;
}

埋坑:字符串基数排序最高位优先(msd)

标签:sort,洛谷,string,整数,P1012,numbers,字符串,20241024,cmp
From: https://www.cnblogs.com/dianman/p/18503328

相关文章

  • C语言-详细讲解-洛谷P1255 数楼梯
    目录1.题目要求2.题目解读 1.如何计算走法数?2.如何解决大数加法,防止数据溢出1.进位的处理2.正序运算,倒序输出3.寻找结果中最高的非零位3.代码实现1.题目要求2.题目解读 一道非常经典的题目,简洁易懂,但需要一定的数学思维,难点如下:1.如何计算走法数?这里需要我......
  • 20241024
    一、盘前计划情绪锚定:常山北明、双成药业、海能达、华立明天的早盘:先抑后扬,关注明天的午盘,或尾盘关键点是指数明天是否高开修复,如果不修复,情绪还是要等下午1.宗申动力万丰奥威要稳住,5分钟不破均线多持有观察,日内高点卖(6-8),但要低吸回来宗申动力正常五日线趋势,按照低吸高抛对......
  • 洛谷 P6628 [省选联考 2020 B 卷] 丁香之路 做题记录
    图论好题啊!首先我们枚举终点\(u\),看到一定要走完指定的\(m\)条边,很像一条欧拉路问题啊!但是现在问题是一个欧拉路问题,有两个点的度数是奇数,并不好做。我们不妨先从起点\(s\)向\(u\)连一条边,变成欧拉回路问题。现在我们需要做的是将度数为奇数的点加边使其变为偶数。方法是......
  • 洛谷 P1002 [NOIP2002 普及组] 过河卒
    你好,我是gwg725。洛谷账号:大号小号欢迎与我讨论。:)题目描述:棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上的某一点有一个对方的马(如C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点,如图3-1中的C点和P1,……,P8,卒不能通过......
  • 20241024 模拟赛(长方体,三角形,区间,图)
    看题戳这里总结1h看题+骂出题人1h把之前没做完的题单补了1h闲逛+水群+听歌1h疯狂rush暴力!!!结果看完solution才发现我是fw\(qwq\)最终分数:30+60+60+10解析A.长方体难度:绿暴力:直接三维差分+前缀和搞定。正解:先算出前缀交与后缀交。被\(n\)个长方体覆盖的点就是所......
  • 20241024比赛总结
    T1数位设\(dp_{i,0/1}\)表示前i位,最后一段是/不是d倍数的方案数令\(d=2^x5^ym\)可以将模d同余转化为模\(2^x\),\(5^y\),\(m\)分别同余因为\(2^{20}=1048576>10^6\)所以,当\(j<=i-20\)时,前两项的结果均为0所以首先可以开两个前缀和,求sum[i-1]*10+s[i]-'0'对前两项的取模结果......
  • 大二上 数据结构与算法笔记 20241024
    一.inline在C和C++编程语言中,inline关键字是一种函数修饰符,用于建议编译器在编译时将函数的代码直接插入到每个函数调用的地方,而不是进行常规的函数调用。这样做的目的是减少函数调用的开销,尤其是在函数体较小且调用频繁的情况下。作用和优点:减少函数调用开销:通过将函数......
  • 洛谷 P2680 [NOIP2015 提高组] 运输计划 做题记录
    首先题目要求最大的最小,我们二分答案,对于每个答案,我们筛出比它长的路径,找到它们最长的公共边,删掉后验证正确性即可。找公共边可以用树上差分来做,时间复杂度\(O(m\logn\logV)\),其中\(V\)是二分区间大小。你会发现你挂了一堆点,让我们来卡常:首先预处理出所有节点的\(dfn\),每......
  • 洛谷 P3128 [USACO15DEC] Max Flow P 做题记录
    因为一次添加会对点和边都造成影响,而点一次能加两个,于是最大值一定在点上。由于只有一次询问,考虑树上差分。设一次询问给出的两点为\(x,y\),那么我们在\(x\)和\(y\)处分别加\(1\),在\(\operatorname{lca}(x,y)\)处减\(1\),因为该点本身也有增加,于是我们在它的父节点再减去......
  • 洛谷 P2572 [SCOI2010] 序列操作 做题记录
    其实和小白逛公园差不多,编写代码的难度远大于思路难度,难点是调试:注意在区间异或\(1\)的时候分清代码里的最长连续\(1\)的长度和\(1\)的个数。注意查询最长\(1\)的时候要用结构体上传,如果用到了定值len的话要赋值。注意如果只用一个tag的话,遇到区间异或要对原先......