80分tle求调
查看原帖
80分tle求调
1372429
JJJjzm楼主2024/10/20 16:01

求大佬帮忙QAQ-

以下是代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
	int n;
	cin>>n;
	vector<int> fruit(n);
	for(int c=0;c<n;c++)//输入 
	{
		cin>>fruit[c];
	}
	vector<vector<int> > tong;
	vector<int> fruit_arr;
	int irr=-1;
	for(int c=0;c<n;c++)//装桶 
	{
		if(irr==-1||irr==fruit[c])
		{
			fruit_arr.push_back(c+1);
			irr=fruit[c];
		}
		else
		{
			reverse(fruit_arr.begin(),fruit_arr.end());//因为我记得vector删除要把之后的全部往前提升一位所以就直接翻转了 
			tong.push_back(fruit_arr);
			fruit_arr.clear();
			fruit_arr.push_back(c+1);
			irr=fruit[c];
		}
	}
	if(!fruit_arr.empty())//最后一个 
	{
		reverse(fruit_arr.begin(),fruit_arr.end());
		tong.push_back(fruit_arr);
	}
	while(tong.size()>0)//循环桶 
	{
		int j=-1;
		for(int i=0;i<tong.size();i++)
		{
			if(j!=fruit[tong[i].back()-1]&&!tong[i].empty())//与之前的桶不是一类并且不是空桶 
			{
				cout<<tong[i].back()<<" ";
				j=fruit[tong[i].back()-1];
				tong[i].pop_back();
			}
		}
		cout<<"\n";
		tong.erase(remove_if(tong.begin(), tong.end(), [](const vector<int>& v) { return v.empty(); }), tong.end());

	}
	return 0;
 } 
2024/10/20 16:01
加载中...