Waiting in Line(使用vector)

Waiting in Line

  • 题目
  • 答案
  • 参考

题目

Waiting in Line(使用vector)_第1张图片
Waiting in Line(使用vector)_第2张图片

答案

#include
#include
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
     
	int n,m,k,q,t=1;
	cin>>n>>m>>k>>q;
	vector<int> vec[n+1],init(k+1),line,query(q);
	int time[n+1],ans[k+1];
	fill(time,time+n+1,480);
	fill(ans,ans+k+1,0);
	for(int i=1;i<=k;i++)
	{
     
		cin>>init[i];
		if(i<=n*m) vec[t].push_back(i);
		else line.push_back(i);
		t++;
		if(t>n) t=1;
	}
	for(int i=0;i<q;i++)
	cin>>query[i];
	int cnt=k;
	while(cnt--)
	{
     
		int min=inf,pos=0;
		for(int i=1;i<=n;i++)
		{
     
			if(vec[i].size()==0||time[i]>=1020) continue;
			if(time[i]+init[vec[i][0]]<min)
			{
     
				min=time[i]+init[vec[i][0]];
				pos=i;
			}
		}
		if(min==inf) break;
		int member=vec[pos][0];
		time[pos]=ans[member]=min;
		vec[pos].erase(vec[pos].begin());
		if(line.size())
		{
     
			vec[pos].push_back(line[0]);
			line.erase(line.begin());
		}
	}
	for(int i=0;i<query.size();i++)
	{
     
		if(ans[query[i]]==0) cout<<"Sorry"<<endl;
		else printf("%02d:%02d\n",ans[query[i]]/60,ans[query[i]]%60);
	}
}

参考

Waiting in Line (30分)测试点分析

你可能感兴趣的:(PAT题目练习,PAT)