20分蒟蒻求大佬帮忙看看
查看原帖
20分蒟蒻求大佬帮忙看看
668988
TZYmmmm楼主2022/2/17 17:23
#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
#include <utility>

bool cmp(std::pair<int,int>a,std::pair<int,int>b)
{
	return a.second>b.second;
}

int main()
{
	int n,m;
	std::cin>>n>>m;
	std::map<int,int>getScore;
	for(int i =0;i<n;i++)
	{
		int a,b;
		std::cin>>a>>b;
		getScore[a]=b;	
	}

	//map的value排序
	std::vector<std::pair<int,int>>vec;
	for(std::map<int,int>::iterator it = getScore.begin();it!=getScore.end();it++)
	{
		vec.push_back(std::pair<int,int>(it->first,it->second));
	}
	std::sort(vec.begin(),vec.end(),cmp);

	int id = m*3/2;
	id--;
	int score = vec[id].second;

	//尾端排序
	while(score ==vec[id].second)
	{
		if((id+1)>(n))
		{
			break;
		}
		else
		{
			if(vec[id+1].second==vec[id].second)
			{
				if(vec[id].first>vec[id+1].first)
				{
					int tmp = vec[id+1].first;
					vec[id+1].first = vec[id].first;
					vec[id].first = tmp;
				}
				id++;
			}
			else
			{
				break;
			}
		}
	}
	id++;
	std::cout<<score<<' '<<id<<std::endl;

	//前方数据排序
	for(int i = 0;i<id;i++)
	{
		int o = vec[i].second;
		int p = vec[i+1].second;
		if(o==p)
		{
			if(vec[i].first>vec[i+1].first)
			{
				int tmp = vec[i+1].first;
				vec[i+1].first = vec[i].first;
				vec[i].first = tmp;
			}
		}
	}
	for(int i = 0;i<id;i++)
	{
		std::cout<<vec[i].first<<' '<<vec[i].second<<std::endl;
	}

	return 0;
}
2022/2/17 17:23
加载中...