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