社区讨论

35pts 求条,已通过所有讨论区中的 hack

P8866[NOIP2022] 喵了个喵参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mib40bfs
此快照首次捕获于
2025/11/23 10:39
3 个月前
此快照最后确认于
2025/11/23 12:42
3 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=605,M=2e6+5;
int n,m,k,a[M];
deque<int> stk[N];
vector<array<int,3> >ans;
vector<int> vis[N],tim[N];
void add(int i,int x){
	vis[a[i]].push_back(x);
	stk[x].push_back(a[i]);
	ans.push_back({1,x,0});
}
void solve(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++)
		stk[i].clear();
	for(int i=1;i<=m;i++)
		cin>>a[i],vis[a[i]].clear();
	int cnt=0;
	ans.clear();
	for(int i=1;i<=m;i++){
		if(vis[a[i]].size()){
			cnt--;
			if(stk[vis[a[i]].back()].back()==a[i]){
				ans.push_back({1,vis[a[i]].back(),0});
				stk[vis[a[i]].back()].pop_back();
				vis[a[i]].pop_back();
			}
			else if(stk[vis[a[i]].back()].front()==a[i]){
				ans.push_back({1,n,0});
				ans.push_back({2,vis[a[i]].back(),n});
				stk[vis[a[i]].back()].pop_front();
				vis[a[i]].pop_back();
			}
			else goto fl2;
			continue;
		}
		cnt++;
		if(cnt==k){
			fl2:;
			for(int j=1;j<n;j++)
				if(stk[j].size()<=1){
					add(i,j);
					goto fl;
				}
			for(int j=1;j<=k;j++)
				tim[j].clear();
			for(int j=i+1;j<=m;j++){
				if(a[j]==a[i]) break;
				tim[a[j]].push_back(j);
			}
			for(int j=1;j<n;j++){
				if(tim[stk[j].back()].size()%2==0||(tim[stk[j].front()].size()&&tim[stk[j].back()].back()>tim[stk[j].front()].front())){
					add(i,j);
					goto fl;
				}
			}
			add(i,n);
			fl:;
		}
		else{
			int mn=1;
			for(int i=2;i<n;i++)
				if(stk[i].size()<stk[mn].size()) mn=i;
			add(i,mn);
		}
	}
	for(int i=1;i<=n;i++)
		assert(stk[i].size()==0);//官方数据在这里错了
	cout<<ans.size()<<'\n';
	for(auto [a,b,c]:ans){
		cout<<a<<' '<<b;
		if(c) cout<<' '<<c;
		cout<<'\n';
	}
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int T;cin>>T;
	while(T--) solve();
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...