No.3
2020-04-01
【思路】
省略……
【代码】
#include<bits/stdc++.h>
using namespace std;
inline int read(int &a){a=0;int f=1;char c=getchar();if(c==EOF) return a=EOF;
for(;c<'0' || c>'9';c=getchar()){if(c=='-') f=-1;if(c==EOF) return a=EOF;}
for(;c<='9' && c>='0';a=a*10+c-'0',c=getchar());return a*=f;}
inline void print(int a){int s[20],t=0;if(!a){putchar('0');putchar('\n');return;}
if(a<0) a=-a,putchar('-');while(a){s[t++]=a%10,a/=10;}
for(;t--;putchar(s[t]+'0'));putchar('\n');}
map<int,int> f;
int a[100010],b[100010];
int c[100010],d[100010];
int fa[200010];
int n,tot=0,ans=0;
int reg(int x){
return fa[x]==x?x:fa[x]=reg(fa[x]);
}
int main()
{
freopen("xor.in","r",stdin);
freopen("xor.out","w",stdout);
read(n);
int sa=0,sb=0;
for(int i=1;i<=n;i++) read(a[i]),sa^=a[i],c[i]=a[i];
for(int i=1;i<=n;i++) read(b[i]),sb^=b[i],d[i]=b[i];
n++;
c[n]=a[n]=sa;
d[n]=b[n]=sb;
sort(c+1,c+n+1);
sort(d+1,d+n+1);
int i;
for(i=1;i<=n+1 && !(i>n || c[i]!=d[i]);i++);
if(i<=n)
{
puts("-1");
return 0;
}
for(int i=1;i<=n;i++)
if(a[i]!=b[i] || i==n)
{
if(i<n) ans++;
if(!f[a[i]]) f[a[i]]=++tot;
if(!f[b[i]]) f[b[i]]=++tot;
}
if(!ans)
{
puts("0");
return 0;
}
for(int i=1;i<=tot;i++) fa[i]=i;
for(int i=1;i<=n;i++)
if(a[i]!=b[i]) fa[reg(f[a[i]])]=reg(f[b[i]]);
for(int i=1;i<=tot;i++)
if(fa[i]==i) ans++;
printf("%d\n",ans-1);
return 0;
}