[ CodeForces 1059 C ] Sequence Transformation
\(\\\)
\(Description\)
你现在有大小为\(N\)的一个数集,数字分别为 \(1,2,3,...N\) ,进行\(N\)轮一下操作:
- 输出当前数集内所有数的\(GCD\)
- 从数集中去掉一个数
现在有你确定操作序列,使得输出序列的字典序最大,只需要输出按照你的操作顺序下的输出序列即可。
- \(N\in [1,10^6]\)
\(\\\)
\(Solution\)
考虑最优答案,一定有相当一段长度为\(1\),然后出现了第一个不为 \(1\)的答案。
这个答案一定是 \(2\) 。考虑如果想让答案第一个非\(1\)的是\(3\),就必须去掉所有模三剩余系下不为 \(0\) 的数,显然这个需要去掉的数所构成的数集是远大于由模二剩余系所确定的数集的。
然后考虑将所有奇数去掉以后局面就会变成一个所有的偶数集,显然此时让集合内所有数都除以二有转化为了前一个问题,同样的方法。
具体实现每次只需要输出当前待删除的数字个数个答案,再将答案乘以二,集合大小除以二即可。
特殊的,对于当前只剩下三个数字的情况,序列 \(1,1,3\) 是要比 \(1,1,2\) 要优秀的,注意特判边界。
\(\\\)
\(Code\)
#include<cmath>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define R register
#define gc getchar
using namespace std;
int n,ans=1,tmp;
int main(){
scanf("%d",&n);
while(n){
if(n==3){printf("%d %d %d",ans,ans,ans*3);return 0;}
if(n==2){printf("%d %d",ans,ans*2);return 0;}
if(n==1){printf("%d",ans);return 0;}
tmp=(n+1)/2;
for(R int i=1;i<=tmp;++i) printf("%d ",ans);
n=n/2; ans<<=1;
}
return 0;
}
[ CodeForces 1059 C ] Sequence Transformation的更多相关文章
- Codeforces Round #514 (Div. 2) C. Sequence Transformation(递归)
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操 ...
- [CodeForces]1059C Sequence Transformation
构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把 ...
- 【CF 1059C】 Sequence Transformation 数学
C. Sequence Transformation:http://codeforces.com/contest/1059/problem/C 题意 给你一个n,第一次输出1-n个数的gcd,然后你可 ...
- CF1059C Sequence Transformation 题解
这几天不知道写点什么,状态也不太好,搬个题上来吧 题意:给定一个数n,设一个从1到n的序列,每次删掉一个序列中的数,求按字典序最大化的GCD序列 做法:按2的倍数找,但是如果除2能得到3的这种情况要特 ...
- Codeforces 601B. Lipshitz Sequence(单调栈)
Codeforces 601B. Lipshitz Sequence 题意:,q个询问,每次询问给出l,r,求a数组[l,r]中所有子区间的L值的和. 思路:首先要观察到,斜率最大值只会出现在相邻两点 ...
- CodeForces - 1059C Sequence Transformation (GCD相关)
Let's call the following process a transformation of a sequence of length nn. If the sequence is emp ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation 思维构造
题意 给出一个1-n的集合 gcd 集合里面的所有数 得到的 一个 数 然后自己选择删去一个数 要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数 ...
- Codeforces Round #514 (Div. 2) C. Sequence Transformation
题目大意:给你一个n 从1,2,3......n这个序列中 依次进行以下操作:1 .求所有数的最大公因数,放入a序列里面 2 .任意删去一个元素 一直到序列为空 根据删除元素的不同,导致序列a的字典序 ...
- codeforces 1059C. Sequence Transformation【构造】
题目:戳这里 题意:有1,2,3...n这n个数,求一次这些数的gcd,删去一个数,直到剩下一个数为止.输出这n个gcd的最大字典序. 解题思路:一开始的gcd肯定是1,要让字典序最大,我们可以想到下 ...
随机推荐
- SAS编程基础 - 菜鸟入门常用操作
1. SAS9.4添加和取消注释的快捷键? Ctrl+/:添加注释 Ctrl+Shift+/:取消注释 2. 如何强制终止程序运行? 看到那个圆圈里带叹号的图标了吗?没错,就是它 - 中断! 3. 如 ...
- 启用Mac系统读写NFTS磁盘
从Mac OSX 10.6系统开始苹果系统已经内置对NTFS写入功能,但苹果没有公开说明,而且在默认状态下是没有开启的.SL-NTFS是一款Mac上的小工具,它可以直接为你的Mac增加NTFS的写入权 ...
- Symantec Backup Exec部署手册
转载 http://xiaxiaoguo.blog.51cto.com/858884/402810 Symantec Backup Exec部署手册 目录 1.Backup Exec 12.5安装. ...
- UML图与机房收费系统实例
前言 通过看视频,对于UML也有了一些初步的了解.前面也介绍了UML的三个基本块.规则和机制,只是这些东西就像是一个个机器的零部件.要组合起来才干发挥作用. 所以,实例才是验证自己学习好坏标准,以下我 ...
- Cocos2dx 小技巧(九)现成的粒子特效
和高中的她 差点儿相同有两三年没见面了吧.下午她正好来泉州.我俩出来一起吃了个饭. 怎么说呢,自从高中毕业后我俩的联系就少了非常多.大学期间也就见过两三面吧. 现在毕业也快一年了,她已是人妇,而我自己 ...
- Eclipse + CDT引入OpenCV失败的解决的方法
Android JNI开发中用到了OpenCV,由于想通过JNI实现,就没有去用Android层的Lib引用. 可是操作中发如今.cpp文件中include的时候发现"#include &l ...
- MySQL-子查询,派生表,通用表达式
MySQL-子查询 MySQL子查询是嵌套在另一个查询中的查询. MySQL子查询还可以嵌套在另一个子查询中. MySQL子查询称为内部查询,而包含子查询的查询称为外部查询. 查询返回在位于美国(US ...
- POJ 1477:Box of Bricks
Box of Bricks Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19949 Accepted: 8029 De ...
- MySQL 基础 —— 数据类型、各种变量
1. 基本数据类型 char:prod_id char(10),括号内的内容表示字符的长度 decimal:十进制,不带参数为整数(四舍五入) text:文本类型,长度不限 2. 日期和时间处理函数 ...
- 【409】Linux 系统 Testrun
文件名:Testrun #!/bin/sh PROG=./puzzle case $1 in 1) T=Tests/bad* ;; 2) T=Tests/sol* ;; 3) T=Tests/unso ...