用STL-queue直接模拟就AC
查看原帖
用STL-queue直接模拟就AC
278017
fishtail楼主2021/10/25 15:04

外层queue统计水果分块,内层queue记录水果块内水果编号。简单的模拟就行。

#include <bits/stdc++.h>
using namespace std;

struct Node{
	queue<int> q;
	int t;
};
queue<Node *> qq;
int n,k,tmp;

int main()
{
	int x,y;
	Node *pn;
	//先压入第一个水果 
	cin>>n;
	cin>>x; y=x;
	pn = new Node;
	pn->t = x;
	pn->q.push(1);
	//压入后续n-1个水果	
	for(int i=2;i<=n;i++){
		cin>>x;
		//如果和上个水果不同,就新开一个node 
		if(pn->t != x){
			qq.push(pn);
			pn=new Node;
			pn->t = x;
		}
		pn->q.push(i);
	}
	//最后一个压入
	qq.push(pn);
	//压入一个结束标记,用来控制一轮水果选择结束 
	pn = new Node;
	pn->t = 3; //不是0,也不是1就可以 
	pn->q.push(0); //只是为了后续循环判断统一 
	qq.push(pn); 
	//输出
	y=4; //初始一个和所有水果不同的编号 
	while(qq.size()>1){
		pn = qq.front();
		qq.pop();
		//如果和上次选的水果不同 
		if(pn->t != y){
			//如果是一轮结束标记,打印换行,更新y 
			if(pn->t == 3){
				cout<<endl; 
				y=4;
			}
			else{ //否则输出水果编号 
				cout<<pn->q.front()<<" ";
				pn->q.pop();
				y=pn->t; 
			}			
		}
		//还有水果就继续入队列 
		if(pn->q.size()){
			qq.push(pn);
		}
		else{ //否则删除 
			delete pn;
		}
	} 
	return 0;
}

2021/10/25 15:04
加载中...