[CodeForces]1059C Sequence Transformation】的更多相关文章

构造题. 我递归构造的,发现如果N>3的话就优先删奇数,然后就把删完的提取一个公约数2,再重复操作即可. 具体原因我觉得是因为对于一个长度大于3的序列,2的倍数总是最多,要令字典序最大,所以就把非2的倍数全删了. 假设不删奇数,剩下的数要提取出来非1的公因数,要删的数一定比删奇数删的起码多1,出现比之前的公因数大的质因数的位置就会往后推,这样字典序就小了. #include <iostream> #include <cstdio> #include <vector>…
Let's call the following process a transformation of a sequence of length nn. If the sequence is empty, the process ends. Otherwise, append the greatest common divisor (GCD) of all the elements of the sequence to the result and remove one arbitrary e…
题目:戳这里 题意:有1,2,3...n这n个数,求一次这些数的gcd,删去一个数,直到剩下一个数为止.输出这n个gcd的最大字典序. 解题思路:一开始的gcd肯定是1,要让字典序最大,我们可以想到下一个应该是2.这样就要把所有的奇数全给删去,这样就要考虑一个特殊情况,就是把所有奇数删去之后,刚好n==1的时候.因为n==1的话,gcd就是剩下的那个数本身了.因此要特判n==3的情况.其他的时候循环删除奇数的操作.(要不是b题看不懂题意,这次也不会那么惨T T 具体看代码. 1 #include…
C. Sequence Transformation 题目链接:https://codeforces.com/contest/1059/problem/C 题意: 现在有1~n共n个数,然后执行下面操作: 1.求出余下数的gcd,然后将gcd加入答案队列: 2.从中任意删除一个数,如果余下数的个数大于0,回到步骤1. 问答案队列字典序最大是什么. 题解: 这明明是递归在做极其方便,我偏偏用for循环来搞,加各种判断... 首先对于1,2,3...n来说,我们每次删去一个数时,肯定首先删去的是奇数…
C. Sequence Transformation:http://codeforces.com/contest/1059/problem/C 题意 给你一个n,第一次输出1-n个数的gcd,然后你可以任意删除1-n中的数字,然后输出剩下n-1个数的gcd,再删一个数...,最后就是输出n个gcd值对吧. 要求输出的数列字典序最大. 思路 首先对于一个n,为了使得数列字典序最大,肯定是越早输出2越好,所以前面先把所有的奇数去掉,前(n+1)/2 个数肯定也就是1,那么剩下的偶数呢,可以先对这些偶…
题目链接:Codeforces 486C Palindrome Transformation 题目大意:给定一个字符串,长度N.指针位置P,问说最少花多少步将字符串变成回文串. 解题思路:事实上仅仅要是对称位置不同样的.那么指针肯定要先移动到这里,改动字符仅仅须要考虑两种方向哪种更优即 可. 然后将全部须要到达的位置跳出来.贪心处理. #include <cstdio> #include <cstring> #include <cstdlib> #include <…
这几天不知道写点什么,状态也不太好,搬个题上来吧 题意:给定一个数n,设一个从1到n的序列,每次删掉一个序列中的数,求按字典序最大化的GCD序列 做法:按2的倍数找,但是如果除2能得到3的这种情况要特殊处理(¥#……%¥……@#¥不知道该怎么描述,看代码吧) C. Sequence Transformation time limit per test 2 seconds memory limit per test 256 megabytes input standard input output…
题意 给出一个1-n的集合   gcd 集合里面的所有数  得到的 一个 数   然后自己选择删去一个数   要使得到的数 构成的数列 的字典序最大 思路: gcd所有数 那gcd得到的数肯定要小于数组中最小的数  所以 刚开始都是1   所以优先删去1  那就要使gcd所有数经可能快得到 2 如何快速到2 呢 那就是把奇数全部删掉  那剩下得数最小就为2 了  此时为 2 4 6 8 10....  此刻就从2开始删   当n==3时 有 x ,2x,3x  此时 只有 删 x 2 x   3…
题目大意:给你一个n 从1,2,3......n这个序列中 依次进行以下操作:1 .求所有数的最大公因数,放入a序列里面 2 .任意删去一个元素 一直到序列为空 根据删除元素的不同,导致序列a的字典序可能不同 输出字典序最大的a序列 看到这题,首先我想到gcd的两个特性,首先gcd(a1,a2,a3,a4.....an)  <= min(a1,a2,a3,a4...an); 其次  任意两个相邻的数  gcd等于1   gcd(4,5) == 1 回过头看序列  1  ,2   , 3  , …
\(\\\) \(Description\) 你现在有大小为\(N\)的一个数集,数字分别为 \(1,2,3,...N\) ,进行\(N\)轮一下操作: 输出当前数集内所有数的\(GCD\) 从数集中去掉一个数 现在有你确定操作序列,使得输出序列的字典序最大,只需要输出按照你的操作顺序下的输出序列即可. \(N\in [1,10^6]\) \(\\\) \(Solution\) 考虑最优答案,一定有相当一段长度为\(1\),然后出现了第一个不为 \(1\)的答案. 这个答案一定是 \(2\) .…