求助 $70$ pts 【悬关】
查看原帖
求助 $70$ pts 【悬关】
961351
nightwatch.ryan楼主2024/7/17 20:18

#8 #9 #10 WA

#include<iostream>
#include<vector>
#include<map>
#define str std::string
#define rp(i,p,n,k) for(int (i)=(p);(i)<(n);(i)+=(k))
#define gli(x) getline(std::cin,x)
#define vc std::vector
#define pb push_back
#define cot continue
#define br break
#define sz size()
bool chk_macn(char x){
	return (isdigit(x)||isalpha(x)||x=='_');
}
struct Define{
	bool has;
	int start_line;
	int end_line;
	str repl;
	bool und;
};
std::map<str,bool>vis;
std::map<str,Define>mp;
void dfs(str x,int le){
	str zm;
	x+=" ";
	rp(i,0,x.sz,1){
		if(chk_macn(x[i])){
			zm+=x[i];
		}else{
			if(mp[zm].has==0){
				std::cout<<zm;
			}else if((le<mp[zm].start_line||mp[zm].end_line<le)||(!mp[zm].und&&le<mp[zm].start_line)){
				std::cout<<zm; 
			}else if(vis[zm]){
				std::cout<<zm;
			}else{
				vis[zm]=1;
				dfs(mp[zm].repl,le);
				vis[zm]=0;
			}
			zm="";
			if(i!=x.sz-1&&x[i])std::cout<<x[i];
		}
	}
}
int main(){
	int n;
	std::cin>>n;
	getchar();
	vc<str>prog;
	rp(i,0,n,1){
		str a;
		gli(a);
		prog.pb(a);
	}
	rp(i,0,n,1){
		if(prog[i].find('#')==-1)cot;
		if(prog[i].find("#define")!=-1){
			str name;
			int sub_index;
			rp(j,8,prog[i].sz,1){
				if(prog[i][j]==' '){
					sub_index=j+1;
					br;
				}
				name+=prog[i][j];
			}
			str comment=prog[i].substr(sub_index);
			mp[name]={1,i,n,comment,0};
		}else{
			str name=prog[i].substr(7);
			mp[name].end_line=i;
			mp[name].und=true;
		}
		prog[i]="";
	}
	rp(i,0,n,1){
		if(!prog[i].sz){
			puts("");
			cot;
		}
		dfs(prog[i],i);
		puts("");
	}
} 
2024/7/17 20:18
加载中...