个人题库 U377054题解
  • 板块题目总版
  • 楼主MeliSky
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/7/24 11:47
  • 上次更新2024/7/24 11:59:04
查看原帖
个人题库 U377054题解
1031153
MeliSky楼主2024/7/24 11:47

解题思路

题目传送门: 黑帮老大的金店黑帮老大的金店

数据结构选择:

建议使用 multiset 来存储金饰的品质。multiset 可以自动排序,并且支持高效的查找和删除操作。当然你直接暴力也无可厚非。

处理流程:

读取输入的(n)和(m) ( n ) 和 ( m )。 将 (n)( n ) 个金饰的品质插入到 multiset 中。 对于每个顾客的需求(x) ( x ): 使用 lower_bound 函数在 multisetmultiset 中查找第一个大于或等于(x)( x )的元素。 如果找到,输出该元素并从multiset multiset 中删除它。 如果没有找到,输出(−1) (-1)。

代码实现:

#include<bits/stdc++.h>
using namespace std;

int main(){

	// 读取输入的整数 n 和 m
	int n,m;
	cin>>n>>m;

	// 创建一个 multiset 来存储 n 个整数
	multiset<int> na;
	for(int i=0;i<n;i++){
		int x;
		cin>>x;
		na.insert(x);
	}

	// 处理 m 次查询
	while(m--){
		int x;
		cin>>x;
		// 查找第一个大于或等于 x 的元素
		multiset<int>::iterator it=na.lower_bound(x);
		if(it==na.end()){
			// 如果没有找到,输出 -1
			cout<<"-1"<<endl;
		}else{
			// 如果找到,输出该元素并从集合中删除并输出 
			cout<<*it<<endl;
			na.erase(it);
		}
	}

	return 0;
}
2024/7/24 11:47
加载中...