求教 CSP-S 2021 T3 被卡的原因
  • 板块灌水区
  • 楼主meizhuhe
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/9 20:00
  • 上次更新2023/11/4 01:01:11
查看原帖
求教 CSP-S 2021 T3 被卡的原因
482921
meizhuhe楼主2021/11/9 20:00

坐标ZJ,为什么大家都说CCF数据水,而我洛谷民间欢欢喜喜的100,CCF悲悲惨惨的60......

最终,45+0+60+0=105.......

然而,死也得死得明白,求教代码的问题!

#include <bits/stdc++.h>
#define MAXN 500009
using namespace std;
const int inf=0x3f3f3f3f;
int a[MAXN<<1];
int l,r;
int t[MAXN][2],tn[MAXN];
int brother(int p){
	return t[a[p]][0]==p?t[a[p]][1]:t[a[p]][0];
}
bool already;
char str[MAXN<<1];
vector<int> fs;int fl,fr;
void dfs(int x){
	if(fl==l&&fr==r){
		if(1){
			int x=0;
			x++;
		}
		for(int i=fs.size()-1;i>=0;i--)
			if(a[fs[i]]==a[l]) str[x++]='L',++l;
			else str[x++]='R',--r;
		already=true;
		return;
	}
	int bl=brother(l),br=brother(r); 
	if((fs.empty()||bl==fl-1||bl==fr+1)&&l<bl){
		++l;
		int tfl=fl,tfr=fr;
		str[x]='L';
		if(fs.empty()) fs.push_back(bl),fl=fr=bl;
		else if(bl<l||bl>r);
		else if(bl<fl) fs.push_back(bl),fl--;
		else fs.push_back(bl),fr++;
		dfs(x+1);
		if(already)
			return;
		fs.pop_back();
		fl=tfl,fr=tfr;
		l--;
	}
	if((fs.empty()||br==fl-1||br==fr+1)&&r>br){
		str[x]='R';
		int tfl=fl,tfr=fr;
		--r;
		if(fs.empty()) fs.push_back(br),fl=fr=br;
		else if(br<l||br>r);
		else if(br<fl) fs.push_back(br),fl--;
		else fs.push_back(br),fr++;
		dfs(x+1);
		if(already)
			return;
		fs.pop_back();
		fl=tfl,fr=tfr;
		++r;
	}
}
void solve(int n){
	vector<int> vec;
	fs.clear();
	already=false;
	fl=fr=0;
	dfs(1);
	if(already) printf("%s\n",str+1);
	else puts("-1");
}
int main(){
	freopen("palin.in","r",stdin);
	freopen("palin.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--){
		int n;
		scanf("%d",&n);
		l=1,r=2*n;
		for(int i=1;i<=2*n;i++)
			scanf("%d",&a[i]),t[a[i]][tn[a[i]]++]=i;
		solve(n);
		memset(str,0,sizeof(str));
		memset(t,0,sizeof(t));
		memset(tn,0,sizeof(tn));
		memset(a,0,sizeof(a));
	}
	return 0;
}
2021/11/9 20:00
加载中...