20pts求hack
查看原帖
20pts求hack
1025109
ggpw_XNW楼主2025/8/29 16:12
#include<iostream>
#include<vector>
#include<string>
#include<stack>
using namespace std;
string s , cnt , tmp;
vector<string> ans;
bool quote , match , closed;
stack<int> st;
void work(string s){
	int i = 0;
	while(i<s.size()){
		tmp = "";
		if(quote){
			if(i<s.size()&&s[i]=='[')tmp += "[" , i++;
			if(i<s.size()&&s[i]==']')tmp += "]" , i++;
			for(;i<s.size()&&s[i]!='['&&s[i]!=']';i++)tmp += s[i];
			if(tmp=="[/quote"&&s[i]==']'){
				int l = 0 , r = cnt.size() - 1;tmp = "";
				while(l<s.size()&&s[l]==' ')l++;
				while(r>=0&&s[r]==' ')r--;
				for(int j=l;j<=r;j++)tmp += cnt[j];
				cnt = tmp , cnt = "> " + cnt;
				if(cnt!="> ")ans.push_back(cnt);
				quote = 0 , cnt = "";
			}else cnt += tmp;
			continue;
		}
		while(i<s.size()&&(s[i]=='['||s[i]==']'||s[i]=='='))i++;
		for(;i<s.size()&&s[i]!=']'&&s[i]!='='&&s[i]!='[';i++)tmp += s[i];
//		cout << tmp << "\n";
		if(tmp=="h1"){
			cnt += "# " , st.push(1);
		}else if(tmp=="h2"){
			cnt += "## " , st.push(2);
		}else if(tmp=="i"){
			cnt += "*" , st.push(3);
		}else if(tmp=="b"){
			cnt += "__" , st.push(4);
		}else if(tmp=="url"){
			st.push(5);
			string name = "" , url = "" , t = "";i++;
			int num = 1;
			if(s[i]=='[')num++;
			if(s[i]==']')num--;
			if(s[i+1]=='[')num++;
			if(s[i+1]==']')num--;
			if(num<=0)url += s[i];
			for(;i<s.size()-1&&num;i++){
				url += s[i];
				if(s[i+1]=='[')num++;
				if(s[i+1]==']')num--;
			}
			t = cnt , cnt = "" , work(url);
			url = cnt , cnt = t;
			i++ , num = 1;
			if(s[i]=='=')num++;
			if(s[i]=='/')num--;
			if(s[i+1]=='=')num++;
			if(s[i+1]=='/')num--;
			if(num<=0)name += s[i];
			for(;i<s.size()-2&&(s[i]!='['||s[i+2]!='u');i++){
				name += s[i];
				if(s[i+1]=='=')num++;
				if(s[i+1]=='/')num--;
			}
			t = cnt , cnt = "" , work(name);
			name = cnt , cnt = t;
			cnt += "[" , cnt += name , cnt += "]" , cnt += "(" , cnt += url;
			cnt += ")";
		}else if(tmp=="img"){
			st.push(6);
			string name = "" , url = "" , t = "";i++;
			int num = 1;
			if(s[i]=='[')num++;
			if(s[i]==']')num--;
			if(s[i+1]=='[')num++;
			if(s[i+1]==']')num--;
			if(num<=0)url += s[i];
			for(;i<s.size()-1&&num;i++){
				url += s[i];
				if(s[i+1]=='[')num++;
				if(s[i+1]==']')num--;
			}
			t = cnt , cnt = "" , work(url);
			url = cnt , cnt = t;
			i++ , num = 1;
			if(s[i]=='=')num++;
			if(s[i]=='/')num--;
			if(s[i+1]=='=')num++;
			if(s[i+1]=='/')num--;
			if(num==0)name += s[i];
			for(;i<s.size()-3&&(s[i]!='['||s[i+2]!='i'||s[i+3]!='m');i++){
				name += s[i];
				if(s[i+1]=='=')num++;
				if(s[i+1]=='/')num--;
			}
			t = cnt , cnt = "" , work(name);
			name = cnt , cnt = t;
			cnt += "![" , cnt += name , cnt += "]" , cnt += "(" , cnt += url;
			cnt += ")";
		}else if(tmp=="quote"){
			if(cnt!="")ans.push_back(cnt) , cnt = "";
			quote = 1 , i++;
		}else{
			if(tmp=="/h1"){
				if(st.empty()||st.top()!=1){
					match = 1;return;
				}
				st.pop() , cnt += " #";
			}else if(tmp=="/h2"){
				if(st.empty()||st.top()!=2){
					match = 1;return;
				}
				st.pop() , cnt += " ##";
			}else if(tmp=="/i"){
				if(st.empty()||st.top()!=3){
					match = 1;return;
				}
				st.pop() , cnt += "*";
			}else if(tmp=="/b"){
				if(st.empty()||st.top()!=4){
					match = 1;return;
				}
				st.pop() , cnt += "__";
			}else if(tmp=="/url"){
				if(st.empty()||st.top()!=5){
					match = 1;return;
				}
				st.pop();
			}else if(tmp=="/img"){
				if(st.empty()||st.top()!=6){
					match = 1;return;
				}
				st.pop();
			}else if(tmp=="/quote"){
				match = 1;return;
			}else{
				cnt += tmp , i--;
			}
		}
		if(!quote)i++;
	}
}
signed main(){
	while(getline(cin,s)){
		cnt = "" , work(s);
		if(quote){
			int l = 0 , r = cnt.size() - 1;tmp = "";
			while(l<s.size()&&s[l]==' ')l++;
			while(r>=0&&s[r]==' ')r--;
			for(int j=l;j<=r;j++)tmp += cnt[j];
			cnt = tmp , cnt = "> " + cnt;
		}
		if(cnt!="> "&&cnt!="")ans.push_back(cnt);
	}
	if(!st.empty()){
		while(!st.empty())st.pop() , closed = 1;
	}
	if(match)cout << "Match Error";
	else if(closed||quote)cout << "Unclo" << "sed Mark";
	else{
		for(int i=0;i<ans.size();i++)cout << ans[i] << "\n";
	}
	return 0;
}
2025/8/29 16:12
加载中...