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. 面试官问我JVM调优,我忍不住了!

    面试官:今天要不来聊聊JVM调优相关的吧? 面试官:你曾经在生产环境下有过调优JVM的经历吗? 候选者:没有 面试官:... 候选者:嗯...是这样的,我们一般优化系统的思路是这样的 候选者:1. 一 ...

  2. javaSE基础复习

    第一天:复习java入门知识,jvm内存,java程序执行流程,数据类型,变量和自动类型转换,运算符... 学习java目的:起初是因为想找工作,拿高薪.后来逐渐在学习java技术的过程中渐渐循喜欢上 ...

  3. xshell的快捷复制粘贴设置

    今天试着用xshell连接Linux,运行一些命令的时候想快点复制粘贴实现效率,却发现还要右键选择复制,再右键选择粘贴,很是麻烦. 看了一下xshell的设置,其实可以自己设置成快捷方式 以xshel ...

  4. Mysql的delimiter

    告诉MySQL解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号;.在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令. 有时 ...

  5. Linux—export命令查看、修改用户环境变量

    Linux export 命令用于设置或显示环境变量. 在 shell 中执行程序时,shell 会提供一组环境变量. export 可新增,修改或删除环境变量,供后续执行的程序使用. export ...

  6. 15.Pow(x, n)

    Pow(x, n) Total Accepted: 88351 Total Submissions: 317095 Difficulty: Medium Implement pow(x, n). 思路 ...

  7. EPOLL原理详解(图文并茂)

    文章核心思想是: 要清晰明白EPOLL为什么性能好. 本文会从网卡接收数据的流程讲起,串联起CPU中断.操作系统进程调度等知识:再一步步分析阻塞接收数据.select到epoll的进化过程:最后探究e ...

  8. Python查找最长回文暴力方法

    查找最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为1000. 例如1: 输入: "babad" 输出: "bab" ...

  9. 工作学习2-gcc升级引发的崩溃

    分享一下调查gcc 8.0下,函数漏写返回值崩溃问题,调查记录. 现在新的硬件,基本操作系统都是redhat 8.0,升级后测试时,发现了一个崩溃问题,记录一下. ================== ...

  10. Yarn 生产环境核心参数配置案例

    目录 Yarn 生产环境核心参数配置案例 需求 修改yarn-site.xml配置 分发 重启集群 执行WordCount程序 Yarn 生产环境核心参数配置案例 调整下列参数之前要拍摄Linux快照 ...