50pts,咋搞
查看原帖
50pts,咋搞
639483
FiresonZ楼主2022/4/20 20:23
#include<vector>
#include<iostream>
#include<array>
#include<string>
#include<sstream>
#include<algorithm>
#include<bitset>
#define reg register
using namespace std;
using gg=long long;
struct node{
	string from,to;
};
bitset<1000000> flag;
vector<node> tail;
void solve(string &str)
{
	bool fl=false;
	for(gg v=1;v<=5;v++)
	for(reg gg i=0;i<tail.size();i++)
	{
		if(!flag[i])
		{
			while(str.find(tail[i].from)!=string::npos)
			{
				str.replace(str.find(tail[i].from),tail[i].from.size(),tail[i].to);
				fl=true;
			}
			if(fl)
			{
				flag[i]=true;
				fl=false;
			}
		}
	}
	flag.reset();
	return;
}
bool cmp(const node &a,const node &b)
{
	return a.from>b.from;
}
int main()
{
	cin.tie(0);
	reg string tp,cl;
	reg node temp;
	reg gg n;
	cin>>n;
	getchar();
	for(reg gg i=1;i<=n;i++)
	{
		getline(cin,tp);
		if(tp[0]=='#')
		{
			switch(tp[1])
			{
				case'd':{
					stringstream ss(tp);
					ss>>cl>>cl;
					temp.from=cl;
					ss>>cl;
					temp.to=cl;
					tail.push_back(temp);
					sort(tail.begin(),tail.end(),cmp);
					break;
				}
				case'u':{
					stringstream ss(tp);
					ss>>cl>>cl;
					for(gg i=0;i<tail.size();i++)
					{
						if(tail[i].from==cl)
						{
							tail.erase(tail.begin()+i);
							break;
						}
					}
					break;
				}
			}
			cout<<'\n';
		}
		else
		{
			solve(tp);
			cout<<tp<<'\n';
			//处理 
		}
	}
	return 0;
}
2022/4/20 20:23
加载中...