csp 20170903

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct Att
{
	int num,take_time,return_time;
};
bool take_timeS(Att a,Att b)
{
	return (a.take_time<b.take_time);
}
bool return_timeS(Att a,Att b)
{
	return (a.return_time<b.return_time);
}
int main()
{
	vector<Att> att1;
	vector<Att> att2;
	vector<int> key;
	vector<int> return_box; 
	int n,k;
	cin>>n>>k;
	for(int i=0;i<n;i++)
	{
		key.push_back(i+1);
	}
	for(int i=0;i<k;i++)
	{
		Att ex;
		cin>>ex.num>>ex.take_time>>ex.return_time;
		ex.return_time+=ex.take_time;
		att1.push_back(ex);
	}
	sort(att1.begin(),att1.end(),take_timeS);
	for(int i=0;i<k;i++)
	{
		Att ex;
		ex.num=att1[i].num;ex.return_time=att1[i].return_time;ex.take_time=att1[i].take_time;
		att2.push_back(ex);
	}
	sort(att1.begin(),att1.end(),return_timeS);
	//cout<<att1[0].return_time<<" "<<att2[0].take_time<<endl;
	int count2=0,count1=0;
    //cout<<att1[k-1].return_time<<" "<<att2[k-1].take_time<<endl;
	for(int i=att2[0].take_time;i<=att1[k-1].return_time;i++)
	{
	//	cout<<"i:"<<i<<endl;
		while(i>=att1[count1].return_time&&count1<k)
		{
			if(i==att1[count1].return_time)
			{
				return_box.push_back(att1[count1].num);
			}
			count1++;
		//	cout<<"count1:"<<count1<<endl;
		}
		sort(return_box.begin(),return_box.end());
		for(int j=0,jj=0;jj<return_box.size()&&j<n;j++)
		{
			if(key[j]==0)
			{
				key[j]=return_box[jj];
				//cout<<"还回:"<<key[j]<<endl;
				jj++;
			}	
		} 
		return_box.clear();
		while(i>=att2[count2].take_time)
		{
			if(i==att2[count2].take_time)
			{
				int N=att2[count2].num;
				for(int j=0;j<n;j++)
				{
					if(key[j]==N)
					{
						key[j]=0;
					//	cout<<"取:"<<N<<endl;
						break;
					}
				}
			}
			count2++;
			//cout<<"count2:"<<count2<<endl;
		}
	}
	for(int i=0;i<n;i++)
	cout<<key[i]<<" ";
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值