Description

         LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人。他对人说话,总是满口垃圾题目者也,教人半懂不懂的。因为他姓李,别人便从QQ群上的“毒瘤李Fee”这半懂不懂的话里,替他取下一个绰号,叫做李Fee。
        李Fee一到机房,所有做题的人便都看着他笑,有的叫道,“李Fee,你又来出毒瘤题了!”他不回答,对验题人说,“我又出了两道题,给我验验。”便排出一排毒瘤题。大家又故意的高声嚷道,“你又暴露奸商本性拿毒瘤题骗钱剥削验题人了!”李Fee睁大眼睛说,“你怎么这样凭空污人清白……”“什么清白?我前天亲眼见你出了道毒瘤骗钱题,被PTY把std吊着打。” 李Fee便涨红了脸,额上的青筋条条绽出,争辩道,“出题人的题不能算骗……毒瘤!……出题人的题,能算毒瘤骗钱题么?”接连便是难懂的话,什么“多叉splay随机点分治”,什么“树链剖分套分治FFT”之类,引得众人都哄笑起来:机房内外充满了快活的空气。
虽然他的题十分毒瘤,但他的题还总是有买家。李Fee现在有N道毒瘤题,想将这些题出成一组题来骗大钱。然而显而易见的是,一组题的毒瘤程度不仅和每道题的毒瘤程度有关,也跟它们的排列顺序有关,李Fee需要将它们排列成最毒瘤但又最能骗钱的那个顺序。
       具体来说,这N道题每题都有一个毒瘤值,它们构成了一个序列。李Fee心目中有一个理想的毒瘤值序列,这个序列并不一定每一题的毒瘤值都是原本N道题中出现的,所以李Fee准备进行一些改动。这些改动体现在毒瘤值上就是将某道题的毒瘤值改为所有题的毒瘤值的二进制异或值。但是,改动题目是很麻烦的,他想算出最少需要多少次改动才能将原本的毒瘤值序列改成理想的毒瘤值序列,李Fee忙于出毒瘤题,他想请发明O(1/n)算法用暴力搜过所有毒瘤题的你帮他算出答案。但是他是个奸商,所以他并不打算给你报酬。

Input

第一行1个正整数N,如题目所示。
第二行N个非负整数,表示初始的题目毒瘤值序列
第三行N个非负整数,表示理想的题目毒瘤值序列

Output

单独一行,一个整数,表示最少需要多少次改动
如果怎么改动都无法改成理想的毒瘤值序列,说明这组题出的相当失败,请输出-1

Sample Input

3
0 1 2
3 1 0

Sample Output

2

样例解释:
第一次,整个序列异或为3,把第一个数0换成3,序列变成3,1,2
第二次,整个序列异或为0,把第三个数2换成0,序列变成3,1,0

Data Constraint

对于10%的数据,1<=N<=5
对于30%的数据,1<=N<=10
另有20%的数据,毒瘤值为0或1
对于100%的数据,1<=N<=100000 毒瘤值<2^30

Hint

不要被事物的表面现象所迷惑
 
做法(摘自jzoj):考虑操作的本质 只要按位稍微分析一下,就可以发现,题目相当于一开始手里抓着整个序列 a 的异 或,一次操作可以将手上的数与序列中的某个数换过来 知道操作的本质就简单许多 如果能够完成,方便起见将 a 的异或和 b 的异或分别加到序列末,排序后两个序 列显然完全相同,这样就把-1 判掉了 只有 a[i]!=b[i]的位置我们是需要调整的 那么将 a,b 离散化,a[i]与 b[i]连边 考虑统计答案 将一个联通块内换完所需要的次数明显就是联通块大小。 而联通块之间跳需要 1 的代价 此时由于我们一开始手上抓着的是 a 的异或和 如果它刚好在某一个联通块里面就不用考虑了,否则就必须将它自己看做一个大小 为 0 的联通块 联通块可以用并查集维护
 
 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 100007
using namespace std;
int n,t1,t2,f[N],cnt,ans,sum[N];
struct arr{
int num,id;
}a[N],b[N]; int cmp(arr x,arr y){
return x.num<y.num;
} int Cmp(arr x,arr y){
return x.id<y.id;
} int find(int x){
if (f[x]==x) return x;
return f[x]=find(f[x]);
} int main(){
freopen("duliu.in","r",stdin);
freopen("duliu.out","w",stdout);
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%d",&a[i].num),a[i].id=i,t1^=a[i].num;
for (int i=;i<=n;i++) scanf("%d",&b[i].num),b[i].id=i,t2^=b[i].num;
a[n+].num=t1,b[n+].num=t2;
a[n+].id=n+,b[n+].id=n+;
int tmp=-0x3f3f3f3f;
sort(a+,a+n+,cmp);
sort(b+,b+n+,cmp);
for (int i=;i<=n+;i++){
if (a[i].num!=b[i].num){
printf("-1");
return ;
}
cnt++;
if (a[i].num==tmp) cnt--;
tmp=a[i].num;
a[i].num=cnt,b[i].num=cnt;
}
for (int i=;i<=cnt;i++) f[i]=i;
sort(a+,a+n+,Cmp);
sort(b+,b+n+,Cmp);
for (int i=;i<=n;i++){
int u=a[i].num,v=b[i].num;
if (u==v) continue;
int q=find(u),p=find(v);
ans++;
if (q!=p) f[q]=p;
}
for (int i=;i<=cnt;i++) sum[find(i)]++;
for (int i=;i<=cnt;i++)
if (sum[i]>) ans++;
if (f[a[n+].num]==a[n+].num&&sum[a[n+].num]==) ans++;
printf("%d",ans-);
}

JZOJ| 5910. DuLiu的更多相关文章

  1. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

  2. (jzoj snow的追寻)线段树维护树的直径

    jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...

  3. [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)

    Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...

  4. [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)

    Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...

  5. [jzoj]5478.【NOIP2017提高组正式赛】列队

    Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子.       前段时间,Sylvia 参加了学校 ...

  6. [jzoj]1115.【HNOI2008】GT考试

    Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...

  7. [jzoj]2538.【NOIP2009TG】Hankson 的趣味题

    Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...

  8. [jzoj]4216.【NOIP2015模拟9.12】平方和

    Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...

  9. [jzoj]2938.【NOIP2012模拟8.9】分割田地

    Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...

随机推荐

  1. C++ Knowledge series 2

    Programming language evolves always along with Compiler's evolvement The semantics of constructors O ...

  2. android三大组件之Intent

    Android 应用程序中有三大核心组件: Activity, Service, Broadcast Receiver 都是通过被称之为意图的消息运行. Intent messaging is a f ...

  3. Sql_Server中如何判断表中某字段是否存在

    --比如说要判断表A中的字段C是否存在两个方法: 一, IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.I ...

  4. iBrand 教程:Git 软件安装过程截图

    下载 教程中使用的相关软件下载网盘: https://pan.baidu.com/s/1bqVD5MJ 密码:4lku 安装 请右键 以管理员身份运行 进行软件安装,安装过程如下: 使用 安装完成后, ...

  5. oracle-插入到数据库中为日期

    oracle中创建一个表,其中一个字段为date,当我们进行插入操作 create table xf_allsalestotal ( xf_txdate date not null, xf_store ...

  6. 带来全新的网络格局---html5

    自从HTML5诞生之后,就是开始建立了一个标准的原则,那就是所有的技术它必须是面向开放,并不能有专利的一个存在,在整个期间Opera捐献了css技术,而google的话则是给开发者提供了视频的webM ...

  7. avast从隔离区恢复后,仍无法打开被误杀文件的解决方案

    从隔离区中手动恢复后,隔离区中被恢复的文件将不再展示. 此时,如果手动恢复的文件仍无法打开(图标此时也异常),请: 将avast禁用: 将avast启用. 然后尝试重新打开被误隔离并手动恢复的文件.

  8. 关于安卓手机访问一些网站或者Fiori应用弹出安装证书的提示

    有朋友问遇到在安卓手机上安装Fiori Client,打开的时候提示需要安装证书,如下图所示: 我在自己的Android手机试了试,因为我没有装Fiori Client,所以就用手机浏览器直接访问ht ...

  9. IOS xcode 离线帮助文档安装和安装路径

    将想要安装的xcode 帮助文档 版本,将 ‘帮助文档包’ 放入‘xcode 帮助文档安装路径’.再将Xcode软件重启. xcode 帮助文档安装路径: 在‘应用程序’->Xcode软件 右击 ...

  10. 模拟停车POJ(3505)

    题目链接:http://poj.org/problem?id=3505 解题报告: #include <stdio.h> #include <iostream> #includ ...