Content

给定一个长度为 \(n\) 的数列 \(a\),请将其重新排列,使得 \(\forall i\in[1,n-1]\),都有 \(4\mid (a_i\cdot a_{i+1})\),或者报告不存在。

数据范围:\(2\leqslant n\leqslant 10^5\),\(1\leqslant a_i\leqslant 10^9\)。

Solution

简单的分类讨论题。

我们不妨在读入的时候统计出奇数的数量 \(\textit{cnt}_1\) 和 \(4\) 的倍数的数量 \(\textit{cnt}_2\),然后:

i) 当 \(\textit{cnt}_1+\textit{cnt}_2\neq n\) 时,此时除了奇数和 \(4\) 的倍数以外,还有部分不是 \(4\) 的倍数的偶数,那么它们一定只可能是 \(2\) 的倍数而不可能是 \(2^k(k\geqslant 2)\) 的倍数。因此我们在这里考虑把这些数放到后面去,前面的留给奇数和 \(4\) 的倍数,以使得相邻两个数相乘得到 \(4\) 的倍数。

那么前面的奇数和 \(4\) 的倍数怎么放呢?我们可以考虑交叉放,即先放奇数再放 \(4\) 的倍数再放奇数……或者先放 \(4\) 的倍数再放奇数再放 \(4\) 的倍数……那么最优方案下先放哪个呢?不难发现如果先放奇数的话,最坏情况下当 \(\textit{cnt}_1=\textit{cnt}_2\) 时,是可以构造出合法的排列的。否则就不行。

因此,在 i) 的情况下,只需要满足 \(\textit{cnt}_1\leqslant\textit{cnt}_2\),就能够构造出合法的排列。

ii) 当 \(\textit{cnt}_1+\textit{cnt}_2=n\) 时,此时最坏的情况无非就是 \(\textit{cnt}_1=\textit{cnt}_2+1\) 时,先全部放奇数,然后再在每两个奇数的中间放 \(4\) 的倍数,即可满足要求。

因此,在 ii) 的情况下,只需要满足 \(\textit{cnt}_1\leqslant\textit{cnt}_2+1\),就能够构造出合法的序列。

根据其实际情况分类判断一下就可以了。

Code

int n, a[100007], cntodd, cntfour;

int main() {
n = Rint;
F(int, i, 1, n) {
a[i] = Rint;
if(a[i] % 2) cntodd++;
else if(!(a[i] % 4)) cntfour++;
}
return cntodd <= cntfour || (cntodd + cntfour == n && cntodd - cntfour <= 1) ? Yes : No, 0;
}

AT2686 [ARC080A] 4-adjacent 题解的更多相关文章

  1. 算法与数据结构基础 - 图(Graph)

    图基础 图(Graph)应用广泛,程序中可用邻接表和邻接矩阵表示图.依据不同维度,图可以分为有向图/无向图.有权图/无权图.连通图/非连通图.循环图/非循环图,有向图中的顶点具有入度/出度的概念. 面 ...

  2. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  3. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  4. “玲珑杯”ACM比赛 Round #12题解&源码

    我能说我比较傻么!就只能做一道签到题,没办法,我就先写下A题的题解&源码吧,日后补上剩余题的题解&源码吧!                                     A ...

  5. usaco 2002 月赛 Fiber Communications 题解

    Description Farmer John wants to connect his N (1 <= N <= 1,000) barns (numbered 1..N) with a ...

  6. Adjacent Bit Counts(01组合数)

    Adjacent Bit Counts 4557 Adjacent Bit CountsFor a string of n bits x 1 , x 2 , x 3 ,..., x n , the a ...

  7. 题解——ATCoder AtCoder Grand Contest 017 B - Moderate Differences(数学,构造)

    题面 B - Moderate Differences Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Stat ...

  8. leetcode & lintcode 题解

    刷题备忘录,for bug-free 招行面试题--求无序数组最长连续序列的长度,这里连续指的是值连续--间隔为1,并不是数值的位置连续 问题: 给出一个未排序的整数数组,找出最长的连续元素序列的长度 ...

  9. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

随机推荐

  1. AOP声明式事务

    1.spring-dao.xml修改 参考上面工程配置 <?xml version="1.0" encoding="UTF-8"?> <bea ...

  2. Linux查看进程

    1.ps 有很多参数,不需要全部记住,只需要记住最有用的那些参数. unix风格的参数 比如:ps -ef查看系统上运行的所有进程 ps -l 会产生一个长格式的输出   >UID:启动这些进程 ...

  3. 洛谷 P3721 - [AH2017/HNOI2017]单旋(LCT)

    洛谷题面传送门 终于调出来这道题了,写篇题解( 首先碰到这样的题我们肯定要考虑每种操作会对树的形态产生怎样的影响: 插入操作:对于 BST 有一个性质是,当你插入一个节点时,其在 BST 上的父亲肯定 ...

  4. plink 进行PCA分析

    当我们进行群体遗传分析时,得到vcf后,可利用plink进行主成分(PCA)分析: 一.软件安装 1 conda install plink 二.使用流程 第一步:将vcf转换为plink格式 1 p ...

  5. linux 两服务器之间的文件传输scp

    Linux scp 命令用于 Linux 之间复制文件和目录. scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令. scp 是加 ...

  6. Mysql-单个left join 计算逻辑(一对多问题)

    BUG背景: 我们有一个订单表 和 一个 物流表 它们通过 订单ID 进行一对一的关系绑定.但是由于物流表在保存订单信息的时候没有做判断该订单是否已经有物流信息,这就变成同一个订单id在物流表中存在多 ...

  7. WINDOWS中使用svn

    官网:https://tortoisesvn.net/index.zh.html  (SVN安装包) 然后下载对应的64位安装包(语言包) 安装完后运行 可以存到D盘,新建一个文件夹存放 右键桌面会多 ...

  8. 【模板】单源最短路径(Dijkstra)/洛谷P4779

    题目链接 https://www.luogu.com.cn/problem/P4779 题目大意 给定一个 \(n\) 个点 \(m\) 条边有向图,每个点有一个非负权值,求从 \(s\) 点出发,到 ...

  9. 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明

    1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...

  10. .NET Core基础篇之:集成Swagger文档与自定义Swagger UI

    Swagger大家都不陌生,Swagger (OpenAPI) 是一个与编程语言无关的接口规范,用于描述项目中的 REST API.它的出现主要是节约了开发人员编写接口文档的时间,可以根据项目中的注释 ...