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. Cannot connect to runtime process

    发生一个或多个错误. 未能启动调试适配器.可以在输出窗口中查看额外的信息. Cannot connect to runtime process, timeout after 10000 ms (rea ...

  2. Python技法1:变长和定长序列拆分

    Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组.列表.字符串.文件.迭代器.生成器等. 元组拆分 元组拆分是最为常见的一种拆分,示例如下: p = (4, 5) ...

  3. [WC2021] 表达式求值

    考虑我们显然可以对每位分开求解,考虑求出最终答案是\(A_i\)的方案数. 那么我们发现我们这样\(dp\)的话,显然不太行! 会有一个\(i\)的复杂度 但是如果我们做大于等于的话,就只用一遍\(d ...

  4. Codeforces Round #717 (Div.2) 题解

    我 AK 的第二场(?)的 Div.2,还捡了个 rk4(虽然我 div2 only 的最高记录是 rk2)祭之( A 这题我竟然 WA 了两发,丢人( 直接贪心,对于 \(i=1,2,\cdots, ...

  5. CF1437G Death DBMS

    题面传送门. 题意简述:给出 \(n\) 个字符串 \(s_i\),每个 \(s_i\) 初始权值为 \(0\).\(q\) 次操作:修改 \(s_i\) 的权值:查询给出字符串 \(q\) 能匹配的 ...

  6. 55张图吃透Nacos,妹子都能看懂!

    大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第1篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强? openFeign夺命连环9问,这谁受得 ...

  7. MYSQL权限全解

    • All/All Privileges权限代表全局或者全数据库对象级别的所有权限 • Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合.如果是rename表名, ...

  8. window修改dns本地文件

    文件地址: C:\Windows\System32\drivers\etc 先修改权限: 最后用记事本打开编辑保存即可

  9. C语言 fastq文件转换为fasta文件

    目前只能处理短序列,若要处理长序列,可按照https://www.cnblogs.com/mmtinfo/p/13036039.html的读取方法. 1 #include <stdio.h> ...

  10. CMSIS-RTOS 信号量Semaphores

    信号量Semaphores 和信号类似,信号量也是一种同步多个线程的方式,简单来讲,信号量就是装有一些令牌的容器.当一个线程在执行过程中,就可能遇到一个系统调用来获取信号量令牌,如果这个信号量包含多个 ...