组合积木(模拟

题目

#include<bits/stdc++.h>
using namespace std;
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define int long long
#define eb emplace_back
const int N=1e3+9;
int n,m;
vector<pair<char,int> > s[N];
signed main(){
	ios;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		char a;cin>>a;
		s[i].eb(a,i);
	}
	while(m--){
		int op,x,y;
		cin>>op>>x;
		if(op!=3){
			cin>>y;
			if(op==1)reverse(s[x].begin(),s[x].end());
			for(auto it:s[x])s[y].eb(it);
			s[x].clear();
		}
		else {
			vector<pair<char,int> >now;
			for(auto &[c,i]:s[x]){
				if(i==x)now.eb(c,i);
				else s[i].eb(c,i);
			}
			swap(now,s[x]);
		}
	}
	vector<bool> ok(n,true);
	vector<vector<string> >ans(n+7);!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
	for(int i=1;i<=n;i++){
		vector<string> stk;
		stk.eb();
		int cnt=0;
		for(auto &[c,id]:s[i]){
			if(c=='('){
				cnt++;
				stk.eb();
			}
			else if(c==')'){
				if(cnt<1){
					ok[i]=false;
					break;
				}
				cnt--;
			    if(stk.back().size()){
					ans[i].eb(stk.back());
				}
				stk.pop_back();
			}
			else stk.back()+=c;
		}
		if(cnt!=0)ok[i]=false;
		else {
			if(stk.back().size())ans[i].eb(stk.back());
		}
	}
	for(int i=1;i<=n;i++){
		if(ok[i]==false){
			cout<<"-1\n";
		}
		else {
			cout<<ans[i].size();
			for(auto it:ans[i]){
				cout<<' '<<it;
			}
			cout<<'\n';
		}
	}
	return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_怎么又下雨了_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值