Codeforces Round #514 (Div. 2) C. Sequence Transformation 思维构造

题意 给出一个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   3x 才有最大得字典序  x,x,3x  处理一下就好

(看起来好多人过了,但没看题解就是不会,数学都忘光了,太菜了TAT)

#include<bits/stdc++.h>
using namespace std;
int main(){
  int n;
  cin>>n;
  int cnt=1;
  while(n){
	  if(n==3){
		  printf("%d %d %d",cnt,cnt,cnt*3);
		  break;
	  }
	  for(int i=1;i<=n/2+n%2;i++){
           printf("%d ",cnt);
	  }
	  cnt*=2;
	  n/=2;
  }
	return 0;
}

  

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-04 14:23
steelhead:你回的有问题,让人感觉你就是来学习的
点赞 评论 收藏
分享
程序员牛肉:这一眼假啊,基本上都是骗人的,不然就涉及到职位贪腐了,就像之前华为的OD事件,看你运气好不好了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务