PTA L2-041 插松枝 (25 分)

PTA L2-041 插松枝 (25 分)

题面又长又难读,现场读题20分钟,最后也就只是过了13分的数据,搞人心态的一道题

#include
using namespace std;

int main()
{
    queue<int> a;
	int n,m,k;cin>>n>>m>>k;
	for(int i=0;i<n;i++) 
	{
		int x;cin>>x;
		a.push(x);
	} 
    
    vector<vector<int>> ans;
    vector<int> st;
    stack<int> hz;
	int d;
	while(hz.size() || a.size())
	{
		if(st.size()!=0) d=st.back();
		else d=1e9;
		
		if(hz.size() && hz.top()<=d) //小盒子最上面符合条件,插入松针  
		{
			st.push_back(hz.top());
			hz.pop();
			if((int)st.size()==k) 
			{
				ans.push_back(st);
				st.clear();
			}
		} 
		else if(a.size() && a.front()<=d) //推送器最上面符合条件,插入松针 
		{
			st.push_back(a.front());
			a.pop();
			if((int)st.size()==k) 
			{
				ans.push_back(st);
				st.clear();
			}
		}
		else if(a.size() && (int)hz.size()<m) //不能直接插入松针,推送器放入小盒子
		{
			hz.push(a.front());
			a.pop();
		} 
		else //小盒子满了,推送器也不能插入,开启一个新的松针
		{
			ans.push_back(st);
			st.clear();
		} 
	}
	
	if(st.size()) 
	{
		ans.push_back(st);
		st.clear();
	} 
	
	for(auto &p:ans)
	{
		cout<<p[0];
		for(int i=1;i<(int)p.size();i++)
			cout<<" "<<p[i];
		cout<<endl;
	}
		
	return 0;
}

你可能感兴趣的:(#,STL容器,c++)