RE求调,玄二关
查看原帖
RE求调,玄二关
654577
RainySoul楼主2024/8/10 10:53
#include<bits/stdc++.h>
using namespace std;
const int N=2000010;
int T,n,m,k,a[N],wei[1000],nowshu,ttemp,ans;
deque<int> s[1000];
struct zyx{
	int op,one,two;
}c[N];
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x*f;
}
void write(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)write(x/10);
    putchar(x%10+'0');
    return;
}
int empty_stack_num(){
	for(int i=1;i<=n;i++)
		if(s[i].empty())return i;
	return 114514;
}
int sz1_stack_num(){
	for(int i=1;i<=n;i++)
		if(s[i].size()==1)return i;
	return 114514;
}
int pd(){
	int temp=0;
	for(int i=1;i<=n;i++){
		if(s[i].size()==0)temp++;
//		cout<<"s["<<i<<"]为"<<s[i].size()<<"\n";
	} 
	return temp;
}
void work(){
	T=read();
	while(T--){
		n=read(),m=read(),k=read();
		if(n==1){
			while(m--)printf("1 1\n");
			continue;
		}
		memset(a,0,sizeof a);
		for(int i=1;i<=m;i++)a[i]=read();
		memset(wei,-1,sizeof wei);
		ans=0;
		for(int i=1;i<=m;i++){
//			cout<<"i="<<i<<",a[i]="<<a[i]<<'\n';
//			for(int j=1;j<=n;j++){
//				cout<<s[j].size()<<" ";
//			}
//			cout<<'\n';
			if(wei[a[i]]==-1){
//				cout<<"现在没有a[i]\n";
				int sn=sz1_stack_num();
				if(sn!=114514){
//					printf("1 %d\n",sn);
					c[++ans]=(zyx){1,sn,0};
					s[sn].push_front(a[i]);
					wei[a[i]]=sn;
					continue;
				}
				if(pd()>1){
//					cout<<"这里这里\n";
//					cout<<"pd()不成立\n";
//					int sn=sz1_stack_num();
//					if(sn!=114514){
//						printf("1 %d\n",sn);
//						c[++ans]=(zyx){1,sn,0};
////						cout<<"将"<<a[i]<<"放入"<<sn<<'\n';
//						s[sn].push_front(a[i]);
//						wei[a[i]]=sn;
//						continue;
//					}
					int esn=empty_stack_num();
					if(esn!=114514){
//						printf("1 %d\n",esn);
						c[++ans]=(zyx){1,esn,0};
						s[esn].push_front(a[i]);
						wei[a[i]]=esn;
						continue;
					}
				}
				else{
//					cout<<"只有一个空栈,其他全部为满\n";
					for(int j=i+1;j<=m;j++){
						if(a[i]==a[j]){		
//							cout<<"j="<<j<<'\n';
							for(int fir=i+1;fir<=j;fir++){
//								cout<<"fir="<<fir<<'\n';
//								cout<<"a[fir]="<<a[fir]<<'\n';
//								cout<<"wei[a[fir]]="<<wei[a[fir]]<<'\n'; 
								int di=s[wei[a[fir]]].back();
								if(di==a[fir]){
//									cout<<"fir="<<fir<<'\n';
									int din=s[wei[a[fir]]].front(),cishu=0; 
									for(int k=i+1;k<fir;k++){
										if(a[k]==din)cishu++;
									}
									if(cishu%2==0){
//										cout<<"偶数清空出锅\n";
										int esn=empty_stack_num();
//										printf("1 %d\n",wei[a[fir]]);
										c[++ans]=(zyx){1,wei[a[fir]],0};
										s[wei[a[fir]]].push_front(a[i]);
										wei[a[i]]=wei[a[fir]];
										for(int z=i+1;z<fir;z++){
											if(a[z]==din){
//												printf("1 %d\n",esn);
												c[++ans]=(zyx){1,esn,0};
												continue;
											}
											if(wei[a[z]]==-1){
												sn=sz1_stack_num();
//												printf("1 %d\n",sn);
												c[++ans]=(zyx){1,sn,0};
												s[sn].push_front(a[z]);
												wei[a[z]]=sn;
											}
											else{
//												printf("1 %d\n",wei[a[z]]);
												c[++ans]=(zyx){1,wei[a[z]],0};
												s[wei[a[z]]].pop_front();
												wei[a[z]]=-1;
											}
										}
//										printf("1 %d\n",esn);
										c[++ans]=(zyx){1,esn,0};
//										printf("2 %d %d\n",wei[a[fir]],esn);
										c[++ans]=(zyx){2,wei[a[fir]],esn};
										s[wei[a[fir]]].pop_back();
										wei[a[fir]]=-1;
//										for(int i=1;i<=n;i++){
//											cout<<s[i].size()<<" ";
//										}
//										cout<<'\n';
									}
									else{
										int esn=empty_stack_num();
//										printf("1 %d\n",esn);
										c[++ans]=(zyx){1,esn,0};
										s[esn].push_front(a[i]);
										wei[a[i]]=esn;
										for(int z=i+1;z<fir;z++){
											if(a[z]==din){
//												printf("1 %d\n",wei[a[z]]);
												c[++ans]=(zyx){1,wei[a[z]],0};
												continue;
											}
											if(wei[a[z]]==-1){
												for(int temp=1;temp<=n;temp++){
													if(s[temp].size()==1&&temp!=esn){
														sn=temp;
														break;
													}
												}
//												printf("1 %d\n",sn);
												c[++ans]=(zyx){1,sn,0};
												s[sn].push_front(a[z]);
												wei[a[z]]=sn;
											}
											else{
//												printf("1 %d\n",wei[a[z]]);
												c[++ans]=(zyx){1,wei[a[z]],0};
												s[wei[a[z]]].pop_front();
												wei[a[z]]=-1;
											}
										}
//										printf("1 %d\n",wei[a[fir]]);
										c[++ans]=(zyx){1,wei[a[fir]],0};
										s[wei[a[fir]]].clear();
//										cout<<"di="<<di<<",din="<<din<<'\n';
										wei[di]=-1;
										wei[din]=-1;
//										cout<<"出来了\n";
									}
									i=fir;
									break;
								}
							}
							break;
						}
					}
					continue;
				}
			}
			else{
//				cout<<"这边\n";
				if(s[wei[a[i]]].front()==a[i]){
//					printf("1 %d\n",wei[a[i]]);
					c[++ans]=(zyx){1,wei[a[i]],0};
					s[wei[a[i]]].pop_front();
				}
				else{
					int esn=empty_stack_num();
//					printf("1 %d\n",esn);
					c[++ans]=(zyx){1,esn,0};
//					printf("2 %d %d\n",wei[a[i]],esn);
					c[++ans]=(zyx){2,wei[a[i]],esn};
					s[wei[a[i]]].pop_back();
					wei[a[i]]=-1;
				}
				continue;
			}
//			cout<<"3333,"<<s[3].front()<<" "<<s[3].back()<<'\n';
		}
		cout<<ans<<'\n';
		for(int i=1;i<=ans;i++){
			if(c[i].op==1){
				printf("1 %d\n",c[i].one);
			}
			else if(c[i].op==2){
				printf("2 %d %d\n",c[i].one,c[i].two);
			}
		}
	}
	return;
}
int main(){
	work();
	return 0;
}
/*
1
3 10 5
1 2 3 4 5 1 3 5 2 4

1
4 28 7
1 2 3 4 5 6 7 6 5 6 5 4 2 4 2 1 1 5 4 6 5 4 7 1 2 3 5 4
*/

你说的对,但是《喵了个喵》是由 中国收钱协会 €€£ 自主研发的一款全新开放世界休闲抑智类。游戏发生在一个被称作 NOIP 的幻想世界,在这里,被 CFF 选中的人将被授予代码之力。你将扮演一位名为「OIer」的神秘角色,在自由的旅行中邂逅性格各异、能力独特的 n个双端队列,和他们一起击败RE,找回失散的分数——同时,逐步发掘「AC」的真相。 快和我们一起踏上P8866 [NOIP2022] 喵了个喵 的奇妙旅程吧!

2024/8/10 10:53
加载中...