CF1701B的题解

简单构造题。

很明显的,当 d=2 的时候代价最大。


证明:

pid=pi+1

d 减小时,pid 也在减小,pi+1 也在减小,

那么 pi+1 减小时,pi+1 可供选择的数就越多,代价也随即越大,

那么 d 在取最小值时,代价最大,

因为 p 是个排列,所以没有重复数字,所以 d 最小值为 1


所以我们对于 d=2 来构造即可

#include<cstdio>
#include<cstring>
int t;
int n;
int a[200010];
bool vis[200010];
int tot;
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		tot=0;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;i++)
			if(!vis[i])//如果这个数已经出现在排列中,由于排列的不重复性,所以不能选择该数
				for(int j=i;j<=n;j*=2)
				{
					a[++tot]=j;
					vis[j]=1;//标记,代表此数已出现在排列中
				}
		printf("2\n");
		for(int i=1;i<=n;i++) printf("%d ",a[i]);
		printf("\n");
	}
	return 0;
}
posted @   osfly  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示