原神做法
查看原帖
原神做法
954694
cmpt_xiaoxiao楼主2024/4/19 22:18

我不会什么线性表,就用string和map做的

样例过,2WA 3RE

题目传送门

#include<iostream>
#include<string>
#include<map>
using namespace std;
int n,m;
string q;//队列
map<char,int>t;//标记是否被删
map<char,int>pos;//每个人对应的下标
int main(){
	q="1";
	pos['1']=0;
	cin>>n;
	for(int i=2;i<=n;i++){
		int k,p;
		cin>>k>>p;
		if(p==0){//左边
			q.insert(pos[char(k+48)],1,char(i+48));
			pos[char(i+48)]=pos[char(k+48)];
			for(int j=pos[char(i+48)]+1;j<q.length();j++){//后面的下标+1
				pos[char(j+48)]++;
			} 
		}
		else{//右边
			q.insert(pos[char(k+48)]+1,1,char(i+48));
			pos[char(i+48)]=pos[char(k+48)]+1;
			for(int j=pos[char(i+48)]+1;j<q.length();j++){//后边的下标+1
				pos[char(j+48)]++;
			} 
		}
	}
	for(int i=0;i<q.length();i++){//标记
		t[q[i]]=114514;
	}
	cin>>m;
	for(int i=1;i<=m;i++){
		int u;
		cin>>u;
		t[char(u+48)]=0;//被枪毙的
	}
	for(int i=0;i<q.length();i++){
		if(t[q[i]]==114514) cout<<q[i]<<" ";//没挂就输出
	}
	return 0;
}

救救蒟蒻吧

2024/4/19 22:18
加载中...