Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34350 李羽乔 【S】T2 C++ 通过 100 75 MS 2384 KB 1560 2024-11-06 10:57:19

Tests(10/10):


#include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int n,a[N],b[N],fa[N],l[N],cnt,l2[N],l3[N],tot,tmp; int find(int x){ if(fa[x]==x) return x; else return fa[x]=find(fa[x]); } void merge(int x,int y){ int fx=find(x),fy=find(y); if(fx!=fy){ fa[fx]=fy; } } int main(){ cin>>n; for(int i=1;i<=n+1;i++){ fa[i]=i; } int x=0; for(int i=1;i<=n;i++){ cin>>a[i]; x=(x^a[i]); l[++cnt]=a[i]; } a[n+1]=x; l[++cnt]=a[n+1]; x=0; for(int i=1;i<=n;i++){ cin>>b[i]; x=(x^b[i]); l2[++tot]=b[i]; } b[n+1]=x; l2[++tot]=b[n+1]; sort(l+1,l+cnt+1); sort(l2+1,l2+tot+1); for(int i=1;i<=cnt;i++){ if(l[i]!=l2[i]){ cout<<-1<<endl; exit(0); } } int ans=0; for(int i=1;i<=n+1;i++){ if(a[i]!=b[i]||i==n+1){ l3[++tmp]=a[i]; l3[++tmp]=b[i]; if(i<=n){ ans++; } } } if(ans==0){ cout<<0<<endl; exit(0); } sort(l3+1,l3+tmp+1); int siz=unique(l3+1,l3+tmp+1)-l3-1; for(int i=1;i<=n+1;i++){ if(a[i]!=b[i]){ int p=lower_bound(l3+1,l3+siz+1,a[i])-l3; int p2=lower_bound(l3+1,l3+siz+1,b[i])-l3; merge(p,p2); } } for(int i=1;i<=siz;i++){ if(fa[i]==i){ ans++; } } cout<<ans-1<<endl; return 0; }


测评信息: