社区讨论

本题贪心做法(建议降橙/黄)

P1012[NOIP 1998 提高组] 拼数参与者 13已保存回复 24

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
22 条
当前快照
1 份
快照标识符
@mkp4fgy7
此快照首次捕获于
2026/01/22 15:19
4 周前
此快照最后确认于
2026/01/22 15:24
4 周前
查看原帖
管理帖和工单不太敢发过来的
这道题就是一道贪心题,但是考虑到数据范围和难度,用字符串似乎更好一些。
两个数字串首尾相接,要求组成的数最大,问题可以变化为两个字符串首尾相接,要求最后的字典序最大。那么我们就可以直接在cmp函数里写s1+s2>s2+s1,也就是拼起来字典序如果更大就不交换。最后直接把cmp套进std::sort就可以了,总结下来就是贪心+排序的问题

Code:

CPP
#include<bits/stdc++.h>//16个月前的远古代码
using namespace std;
bool cmp(string s1,string s2){
	return s2+s1<s1+s2;
}
int main(){
	int n;
	string s[30];
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>s[i];
	}
	sort(s+1,s+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<s[i];
	}
}

回复

24 条回复,欢迎继续交流。

正在加载回复...