昨晚 C D 帮忙看一下((
  • 板块学术版
  • 楼主AKPC
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/21 07:42
  • 上次更新2024/8/21 08:28:19
查看原帖
昨晚 C D 帮忙看一下((
540363
AKPC楼主2024/8/21 07:42

c++

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
const int N=1005;
int T,n,f[N][N],a[N][N],cnt;
vector<pair<int,int> >e;
pair<int,int> find(int a,int b){
	while (1){
		cout<<"? "<<a<<' '<<b<<endl;
		int res;cin>>res;
		if (res==a) break;
		b=res;
	}
	return {a,b};
}
void solve(){
	cin>>n;
	for (int i=n;i>1;i--){
		int x=1;
		while (1){
			if (x==i) break;
			pair<int,int>P=find(x,i);
			if (!f[P.fr][P.sc]){
				f[P.fr][P.sc]=1,f[P.sc][P.fr]=1;
				e.push_back({P.fr,P.sc}),cnt++;
			}
			if (cnt>=n-1) break;
			x=P.sc;
		}
		if (cnt>=n-1) break;
	}
	cout<<"! ";
	for (auto i:e) cout<<i.fr<<' '<<i.sc<<' ',f[i.fr][i.sc]=f[i.sc][i.fr]=0;cout<<endl;
	e.clear(),cnt=0;
}
signed main(){
	int t;cin>>t;
	while (t--) solve();
	return 0;
}

d:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fr first
#define sc second
#define lowbit(i) (i&(-i))
inline int read(){
	int res=0,f=1;char c=getchar();
	while (c<'0'||c>'9') {if (c=='-') f=-1;c=getchar();}
	while (c>='0'&&c<='9') {res=res*10+(c-'0');c=getchar();}
	return res*f;
}
const int N=6e5+5;
int T=read(),n,a[N],to[N],e[N],ne[N],ls[N],c[N],tip;
void add(int x,int k){
	for (int i=x;i<=n*2;i+=lowbit(i)) c[i]+=k;
}
int query(int x){
	int res=0;
	for (int i=x;i;i-=lowbit(i)) res+=c[i];
	return res;
}
signed main(){
	while (T--){
		n=read();tip=0;
		for (int i=1;i<=n;i++) a[i]=read(),to[a[i]]=-1;
		for (int i=1;i<=n*2;i++) ne[i]=-1,ls[i]=-1,e[i]=0,add(i,(i&1)?1:-1);int c=0;
		for (int i=1;i<=n;i++){
			if (to[a[i]]==-1){c++;
				ne[tip]=tip+1,e[++tip]=a[i],ls[tip]=tip-1;
				to[a[i]]=tip;
			}
			else if (query(to[a[i]])&1){
				if (ne[to[a[i]]]==-1) continue;
				if (e[to[a[i]]]<e[ne[to[a[i]]]]){
					e[to[a[i]]]=0,ne[ls[to[a[i]]]]=ne[to[a[i]]],ls[ne[to[a[i]]]]=ls[to[a[i]]];
					add(to[a[i]],1),add(2*n+1,-1);
					ne[tip]=tip+1,e[++tip]=a[i],ls[tip]=tip-1;
					to[a[i]]=tip;
				}
			}
			else{
				if (ne[to[a[i]]]==-1) continue;
				if (e[to[a[i]]]>e[ne[to[a[i]]]]){
					e[to[a[i]]]=0,ne[ls[to[a[i]]]]=ne[to[a[i]]],ls[ne[to[a[i]]]]=ls[to[a[i]]];
					add(to[a[i]],1),add(2*n+1,-1);
					ne[tip]=tip+1,e[++tip]=a[i],ls[tip]=tip-1;
					to[a[i]]=tip;
				}
			}
		}
		cout<<c<<'\n';
		for (int i=1;i<=2*n;i++){
			if (e[i]) cout<<e[i]<<' ';
		}cout<<'\n';
	}
	return 0;
}
2024/8/21 07:42
加载中...