【uoj#143】[UER #5]万圣节的数列 构造
给出一个的数列,将其重新排列,使得其等差子序列的数目最小。输出一种可能的排列后的数列。
题解
构造
那天和 EdwardFrog 讨论 bzoj2124 的构造时突然有的灵感,最后发现就是这道题...
通过构造可以使得不存在长度为3的等差子序列。
考虑:如果把所有奇数放到所有偶数的左面,那么就不会出现 “奇-偶-奇” 或 “偶-奇-偶” 的情况。
对于 “奇-奇-奇” 或 “偶-偶-偶” 的情况,将所有 $a_i$ 变为 $\lfloor\frac{a_i}2\rfloor$ 不影响判断,因此将所有数除以2后重复这个过程即可。
由于一个数除以 $\log n$ 次就会变成1,因此这个过程只需要进行 $\log$ 次。
每一层都只会处理 $n$ 个数,时间复杂度 $O(n\log n)$ 。
#include <cstdio>
int a[510] , p[510] , t[510];
void solve(int l , int r , int x)
{
if(!x || l >= r) return;
int i , b = l , e = r;
for(i = l ; i <= r ; i ++ )
{
if(a[p[i]] & 1) t[b ++ ] = p[i];
else t[e -- ] = p[i];
}
for(i = l ; i <= r ; i ++ ) a[p[i]] >>= 1 , p[i] = t[i];
solve(l , e , x - 1) , solve(b , r , x - 1);
}
int main()
{
int n , i;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &a[i]) , p[i] = i;
solve(1 , n , 30);
for(i = 1 ; i <= n ; i ++ ) printf("%d " , p[i]);
return 0;
}
【uoj#143】[UER #5]万圣节的数列 构造的更多相关文章
- UOJ143 万圣节的数列 构造
传送门 做过这道题,然后这道题告诉你怎么构造数据-- 一种可行的构造方式是:将奇数和偶数分成两半,奇数放在偶数前面,然后除以2,再递归下去处理. 构造的正确性是显然的:如果存在"奇数偶数奇数 ...
- 【uoj#225】[UR #15]奥林匹克五子棋 构造
题目描述 两个人在 $n\times m$ 的棋盘上下 $k$ 子棋,问:是否存在一种平局的情况?如果存在则输出一种可能的最终情况. 输入 第一行三个正整数 $n,m,k$ ,意义如前所述. 输出 如 ...
- UOJ #455 [UER #8]雪灾与外卖 (贪心、模拟费用流)
题目链接 http://uoj.ac/contest/47/problem/455 题解 模拟费用流,一个非常神奇的东西. 本题即为WC2019 laofu的讲课中的Problem 8,经典的老鼠进洞 ...
- 贪心数列构造——cf1157D
一开始将数列设置为0 1 2 3 4 5 6... 然后从左到右遍历,每位不够就增加即可 #include<bits/stdc++.h> using namespace std; #def ...
- [UOJ#245][UER#7]天路(近似算法)
允许5%的相对误差,意味着我们可以只输出$\log_{1.05} V$种取值并保证答案合法.并且注意到答案随着区间长度而单增,故取值不同的答案区间是$O(\log_{1.05} V)$的. 于是初始x ...
- 【UOJ#169】元旦老人与数列
论文题. 考虑到这题的维护和区间操作是反向的,也就是说无法像V那题快速的合并标记. 我们知道,一个区间的最小值和其他值是可以分开来维护的,因为如果一个区间被整体覆盖,那么最小值始终是最小值. 对于被覆 ...
- 构造数列Huffman树总耗费_蓝桥杯
快排! /** 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的 ...
- UOJ Easy Round #5
Preface 本着刷遍(只刷一遍)各大OJ的原则我找到了一场UOJ的比赛 无奈UOJ一般的比赛难度太大,我就精选了UER中最简单的一场打了一下,就当是CSP前的练习吧 A. [UER #5]万圣节的 ...
- 算法:求 Huffuman树 构造费用
问题背景: Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, …, pn-1}, ...
随机推荐
- 设计模式之module模式及其改进
写在前面 编写易于维护的代码,其中最重要的方面就是能够找到代码中重复出现的主题并优化他们,这也是设计模式最有价值的地方 <head first设计模式>里有一篇文章,是说使用模式的心智, ...
- html5新特性data_*自定义属性使用
HTML5规范里增加了一个自定义data属性. 这个自定义data属性的用法非常的简单, 就是你可以往HTML标签上添加任意以 "data-"开头的属性, 这些属性页面上是不显示的 ...
- iptables 生产环境下基础设置
iptables 生产环境下基础设置 生成环境需求:防火墙需要让内网的Ip全部通过,外网IP添加到白名单,其他一切拒绝.安装在linux系统中安装yum install iptables-servic ...
- vs2012 与 win7 不兼容的问题
Visual Studio 2012 与此版本的 Windows 不兼容 突然出现的,如下图: 这个是网上找的图,我的没来得及截图就修复了,基本一致,只是我的是win7 64位系统,所以安装位置那里是 ...
- Pyhton配置CGI
目录 CGI配置(Mac版) 添加CGI python文件测试 CGI--common gateway interface 通用网关接口的意思,本文通过python的CGI来整体了解下CGI的配置和使 ...
- 新手入门之——Ubuntu上的编辑器之神Vi / Vim
Ubuntu上的编辑器有gedit.vi.sublime等.gedit一般在没有其他编辑器时临时使用,大部分情况下,vi和sublime使用的比较多,Linux系统内置了vi和sublime,其中,s ...
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- 【UGUI】 (三)------- 背包系统(上)之简易单页背包系统及检索功能的实现
背包系统,无论是游戏还是应用,都是常常见到的功能,其作用及重要性不用我多说,玩过游戏的朋友都应该明白. 在Unity中实现一个简易的背包系统其实并不是太过复杂的事.本文要实现的是一个带检索功能的背包系 ...
- Windows ,获取硬盘物理序列号(VC++)
#include <windows.h> BOOL GetHDID(PCHAR pIDBufer) { HANDLE hDevice=NULL; hDevice=::Crea ...
- 图-最小生成树算法之Kruskal及其Java实现
1.Kruskal算法 Kruskal算法基于贪心,因此它追求的是近似最优解,也就是说由Kruskal得出的生成树并不一定是最优解. Kruskal算法求最小生成树的关键在于,每次选取图中权值最小(及 ...