求助一道站外题
  • 板块题目总版
  • 楼主林志艺
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/7/23 23:11
  • 上次更新2023/10/27 18:42:34
查看原帖
求助一道站外题
549911
林志艺楼主2022/7/23 23:11

这一题,我想了两种解法去做。

第一种,数组大模拟:

#include <iostream>
using namespace std;
struct iuv
{
	int id,urg;
	bool vis;
};
iuv list[100005];
int n,op,Id,Urg,listi,maxmin,id;
bool error;
int main()
{
	cin >> n;
	for(int i=0;i<n;i++)
	{
		cin >> op;
		if(op==1)
		{
			cin >> Id >> Urg;
			list[listi].id=Id;
			list[listi].urg=Urg;
			list[listi].vis=1;
			listi++;
		}
		if(op==2)
		{
			error=0;
			maxmin=100000000;
			for(int i=0;i<listi;i++)
			{
				if(list[i].vis==0)
				{
					continue;
				}
				if(list[i].urg<maxmin)
				{
					maxmin=list[i].urg;
					Id=i;
					id=list[i].id;
					error=1;
				}
			}
			if(error==0)
			{
				cout << "error" << endl;
				continue;
			}
			cout << id << endl;
			list[Id].vis=0;
		}
		if(op==3)
		{
			error=0;
			maxmin=-100000000;
			for(int i=0;i<listi;i++)
			{
				if(list[i].vis==0)
				{
					continue;
				}
				if(list[i].urg>maxmin)
				{
					maxmin=list[i].urg;
					Id=i;
					id=list[i].id;
					error=1;
				}
			}
			if(error==0)
			{
				cout << "error" << endl;
				continue;
			}
			cout << id << endl;
			list[Id].vis=0;
		}
		if(op==4)
		{
			cin >> Id >> Urg;
			for(int i=0;i<listi;i++)
			{
				if(list[i].id==Id)
				{
					list[i].urg=Urg;
				}
			}
		}
		if(op==5)
		{
			cin >> Id >> Urg;
			for(int i=0;i<listi;i++)
			{
				if(list[i].urg==Urg)
				{
					list[i].id=Id;
				}
			}
		}
		if(op==6)
		{
			error=0;
			cin >> Id;
			for(int i=0;i<listi;i++)
			{
				if(list[i].vis==1&&list[i].id==Id)
				{
					cout << list[i].urg << endl;
					error=1;
				}
			}
			if(error==0)
			{
				cout << "error" << endl;
			}
		}
		if(op==7)
		{
			error=0;
			cin >> Urg;
			for(int i=0;i<listi;i++)
			{
				if(list[i].vis==1&&list[i].urg==Urg)
				{
					cout << list[i].id << endl;
					error=1;
				}
			}
			if(error==0)
			{
				cout << "error" << endl;
			}
		}
	}
	return 0;
}

此做法TLE,60分。

第二种,unordered_map优化:

#include <unordered_map>
#include <iostream>
using namespace std;
unordered_map <int,int> um;
int n,op,id,urg,maxmin;
bool error;
int main()
{
	cin >> n;
	for(register int i=0;i<n;i++)
	{
		cin >> op;
		if(op==1)
		{
			cin >> id >> urg;
			um[id]=urg;
		}
		if(op==2)
		{
			maxmin=100000000;
			for(auto i=um.begin();i!=um.end();i++)
			{
				if(i->second<maxmin)
				{
					maxmin=i->second;
					id=i->first;
				}
			}
			if(maxmin==100000000)
			{
				cout << "error" << endl;
			}
			cout << id << endl;
			auto i=um.find(id);
			um.erase(i);
		}
		if(op==3)
		{
			maxmin=-100000000;
			for(auto i=um.begin();i!=um.end();i++)
			{
				if(i->second>maxmin)
				{
					maxmin=i->second;
					id=i->first;
				}
			}
			if(maxmin==-100000000)
			{
				cout << "error" << endl;
			}
			cout << id << endl;
			auto i=um.find(id);
			um.erase(i);
		}
		if(op==4)
		{
			cin >> id >> urg;
			um[id]=urg;
		}
		if(op==5)
		{
			cin >> id >> urg;
			for(auto i=um.begin();i!=um.end();i++)
			{
				if(i->second==urg)
				{
					um.erase(i);
					break;
				}
			}
			um[id]=urg;
		}
		if(op==6)
		{
			cin >> id;
			if(um.find(id)==um.end())
			{
				cout << "error" << endl;
			}
			cout << um[id] << endl;
		}
		if(op==7)
		{
			error=0;
			cin >> urg;
			for(auto i=um.begin();i!=um.end();i++)
			{
				if(i->second==urg)
				{
					cout << i->first << endl;
					error=1;
					break;
				}
			}
			if(error==0)
			{
				cout << "error" << endl;
			}
		}
	}
	return 0;
}

结果TLE0分???

有人能帮忙看下吗?

2022/7/23 23:11
加载中...