社区讨论

0pts球跳

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

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi4rdzp5
此快照首次捕获于
2025/11/18 23:59
4 个月前
此快照最后确认于
2025/11/20 04:04
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define int __int128
#define PII pair<int,pair<int,int>>
#define fir first
#define sec second
#define rd() read()
#define wt write
#define pc putchar
using namespace std;
namespace IO{
	inline int read(){
		int x=0,f=1;
		char c=getchar();
		while(c<'0'||c>'9'){
			if(c=='-'){
				f=-1;
			}
			c=getchar();
		}
		while(c>='0'&&c<='9'){
			x=(x<<1)+(x<<3)+(c^48);
			c=getchar();
		}
		return x*f;
	}
	inline void write(int x){
		if(x<0){
			x=-x;
			putchar('-');
		}
		if(x>9){
			write(x/10),putchar(x%10+'0');
		}
		else{
			putchar(x+'0');
		}
		return ;
	}
}
using namespace IO;
namespace Main{
	const int N=1010;
	int T,cnt;
	int s[N];
	int n,m,k;
	deque<int> q[N];
	vector<PII> res;
	inline int check_tp(int x){
		for(int i=0;i<n;i++){
			if(!q[i].size()){
				return -1;
			}
			if(q[i].front()==x){
				return i;
			}
		}
		return -1;
	}
	inline int check_ed(int x){
		for(int i=0;i<n;i++){
			if(!q[i].size()){
				return -1;
			}
			if(q[i].back()==x){
				return i;
			}
		}
		return -1;
	}
	inline void main(){
		T=rd();
		while(T--){
			n=rd(),m=rd(),k=rd();
			for(int i=1;i<=m;i++){
				s[i]=rd();
			}
			for(int i=1;i<=m;i++){
				int t1=check_tp(s[i]),t2=check_ed(s[i]);
				if(!((~t1)||(~t2))){
					q[(cnt++)%m].push_back(s[i]);
				}
				else if(!(~t1)){
					int t3=0,t4,mns=0x3f3f3f3f;
					for(int j=0;j<n;j++){
						if(!q[j].size()){
							res.push_back({2,{t2,j}});
							q[t2].pop_back();
							t3=1;
							break;
						}
						else if(q[j].size()<mns){
							mns=q[j].size();
							t4=j;
						}
					}
					if(!t3){
						res.push_back({1,{t4,0}});
					}
				}
				else if(!(~t2)){
					q[t1].pop_front();
					res.push_back({1,{t1,0}});
				}
			}
			wt(res.size()),pc('\n');
			for(auto i:res){
				if(!(i.fir-1)){
					pc('1'),pc(' '),wt(i.sec.fir),pc('\n');
				}
				else{
					pc('2'),pc(' '),wt(i.sec.fir),pc(' '),wt(i.sec.sec),pc('\n');
				}
			}
			cnt=0;
			res.clear();
			for(int i=0;i<n;i++){
				q[i].clear();
			}
		}
		return ;
	}
}
signed main(){
	Main::main();
	return 0;
}

回复

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

正在加载回复...