Atcoder ABC296 F

F - Simultaneous Swap

链接:

F - Simultaneous Swap (atcoder.jp)

简要题意:

  • 问题陈述

    给你两个 \(N\) 数字序列: \(A=(A_1,A_2,\ldots,A_N)\) 和 \(B=(B_1,B_2,\ldots,B_N)\) 。

    高桥可以重复下面的操作任意多次(可能为零)。

    在 \(1\) 和 \(N\) 之间选择三个成对的不同整数 \(i\) 、 \(j\) 和 \(k\) 。

    把 \(A\) 的 \(i\) -th 和 \(j\) -th 元素对调,把 \(B\) 的 \(i\) -th 和 \(k\) -th 元素对调。

    如果高桥有办法重复操作使 \(A\) 和 \(B\) 相等,打印 "Yes";否则,打印 "No"。

    在这里, \(A\) 和 \(B\) 相等的条件是,对于每一个 \(1\leq i\leq N\) , \(A\) 的 \(i\) 个元素和 \(B\) 的 \(i\) 个元素相等。

思路:

  • 首先a与b数组元素不相同的情况下一定是NO

  • 我们发现一个重要性质,我们可以保持A不动,只改变B,操作如下

  • 我们发现b数组可以循环轮换排列,并且,如果b数组或者a数组有两个相同元素,那么她们可以通过反复横跳使得顺序一致

  • 如果两个数组中分别都没有重复元素

  • 我们考虑一次上图循环置换顺序,只会让逆序对+2,0,-2,这就意味着奇偶性相同ab数组一定可以转换,反之则不能

代码:

const int N = 200005;
int tr1[N],tr2[N];
int n;
int lb(int x){return x&-x;}
void add(int k,int tr[]){
for(int i = k;i < N;i+=lb(i)) tr[i]++;
}
int qy(int k,int tr[]){
int res = 0;
for(int i = k;i > 0;i-=lb(i)) res+=tr[i];
return res;
}
void solve(){ cin >> n;
map<int,int> h1;
map<int,int> h2;
int a[n + 1],b[n+1];
int c1 = 0,c2 = 0;
for(int i = 1;i<=n;i++){
cin >> a[i];
c1+=qy(a[i],tr1);
add(a[i],tr1);
h1[a[i]]++; }
for(int i = 1;i<=n;i++){
cin >> b[i];
c2+=qy(b[i],tr2);
add(b[i],tr2);
h2[b[i]]++; }
if(h1!=h2){
cout << "No" << endl;
return ;
}
for(int i = 1;i<=n;i++){
if(h2[b[i]]>=2||h1[a[i]]>=2){
cout << "Yes" << endl;
return;
}
}
if(c1%2!=c2%2){
cout << "No" << endl;
}else{
cout << "Yes" << endl;
} }

Atcoder ABC296 F的更多相关文章

  1. Atcoder abc187 F Close Group(动态规划)

    Atcoder abc187 F Close Group 题目 给出一张n个点,m条边的无向图,问删除任意数量的边后,留下来的最少数量的团的个数(\(n \le 18\) ) 题解 核心:枚举状态+动 ...

  2. 【ATcoder s8pc_3 F】 寿司

    http://s8pc-3.contest.atcoder.jp/tasks/s8pc_3_f (题目链接) 题意 有一个长度为$N$的数列$A$,初始为$0$.$Q$次操作,每次两个参数$x,y$. ...

  3. [AtCoder ARC076] F Exhausted?

    霍尔定理 + 线段树? 咱学学霍尔定理... 霍尔定理和二分图完美匹配有关,具体而言,就是定义了二分图存在完美匹配的充要条件: 不妨设当前二分图左端集合为 X ,右端集合为 Y ,X 与 Y 之间的边 ...

  4. 【Atcoder ARC060F】最良表現 / Best Representation

    Atcoder ARC060 F 题意:给一个串,求将其分成最少的没有循环节的串的种数. 思路:先求KMP的\(fail\)数组.然后发现最少的串数只有三种可能:\(1\).\(2\).\(n\). ...

  5. JOI2017 春季合宿:Railway Trip

    自己的AC做法似乎离正解偏了十万八千里而且复杂了不少--不管怎样还是记录下来吧. 题意: 题目链接: JOISC2017 F - AtCoder JOISC2017 F - LOJ \(N\)个车站排 ...

  6. Mysql_以案例为基准之查询

    查询数据操作

  7. [atcoder contest 010] F - Tree Game

    [atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Pro ...

  8. AtCoder Grand Contest 002 F:Leftmost Ball

    题目传送门:https://agc002.contest.atcoder.jp/tasks/agc002_f 题目翻译 你有\(n*k\)个球,这些球一共有\(n\)种颜色,每种颜色有\(k\)个,然 ...

  9. AtCoder Grand Contest 017 F - Zigzag

    题目传送门:https://agc017.contest.atcoder.jp/tasks/agc017_f 题目大意: 找出\(m\)个长度为\(n\)的二进制数,定义两个二进制数的大小关系如下:若 ...

  10. AtCoder Regular Contest 074 F - Lotus Leaves

    题目传送门:https://arc074.contest.atcoder.jp/tasks/arc074_d 题目大意: 给定一个\(H×W\)的网格图,o是可以踩踏的点,.是不可踩踏的点. 现有一人 ...

随机推荐

  1. 我所关注的几个spring设计模式

    Spring框架中实现了许多的设计模式,而且都是非常优先的实现,这些值得我们学好好习. 不过话说回来,我觉得自己只要关注几个即可: 单例 工厂 代理 适配器 观察者 委派 在各种设计模式中,适配器和装 ...

  2. python提取特定格式的数据

    Excel Grid Data Converter 知识点总结 本文档总结了 ExcelGridConverter.py 脚本所涉及的关键 Python 知识点.该脚本用于从多个 Excel 文件中提 ...

  3. USB 协议学习:000-有关概念

    USB 协议学习:000-有关概念 背景 USB作为一种串行接口,应用非常广泛.掌握usb也是作为嵌入式工程师的一项具体要求. 概述 USB( Universal Serial Bus, 通用串行总线 ...

  4. 洛谷P1432

    水一道绿题,整体思路和八数码很像,哈希表存解,然后常规模拟即可 #include<iostream> #include<utility> #include<queue&g ...

  5. 外部网关协议BGP

    不能全部使用RIP与OSPF的原因有二:互联网规模太大,自治系统间路由选择困难:自治系统间路由选择必须考虑有关策略. 在每一个自治系统中有两种不同功能的路由器,边界路由器和内部路由器. BGP四种报文 ...

  6. 输入Javac提示不是内部或外部命令

    先去百度搜索"jdk下载"下载最新版jdk,并安装,安装目录不用去更改,直接默认就好,下载完了之后,双击打开安装,jdk安装完成后,会接着安装jre包,(jre和jdk是配对的,不 ...

  7. MySql(Innodb)事务隔离级别

    事务将数据库从一个一致状态转换至另外一个一致状态,若某个事务看到了另外一个事务在状态转换过程中的中间态数据(不一致状态),将有可能导致另外一个事务的操作基于一个不一致的数据库状态,进而数据库失去一致性 ...

  8. oeasy教您玩转vim - 43 - # 替换模式

    ​ 替换模式 回忆上节课内容 上次我们学到的最有用的就是c 他和d的区别就是删除之后进入到插入模式 c可以配合motion 可以用ciw来快速删除当前光标所在的单词 可i和a 配合的文字块 w wor ...

  9. 用ssh同时push 项目到github和gitee的方法

    ​ 分别为两个网站声称pubkey cd ./ssh ssh-keygen -t rsa -C "oeasy@oeasy.org" -f "github_id_rsa&q ...

  10. 学习笔记--Java中方法递归调用

    Java中方法递归调用 public class RecursionTest01{ public static void main(String[] args){ System.out.println ...