首页 > 其他分享 >CF1858C Yet Another Permutation Problem 题解

CF1858C Yet Another Permutation Problem 题解

时间:2023-08-16 09:44:45浏览次数:43  
标签:ch frac CF1858C int 题解 枚举 Another include

杂言

赛时想到做法,结果调 code 把自己心态调炸了,所以来写一篇题解(恼)。

另:此题与 P9345 夕阳西下几时回 几乎相同,可以此练手。

另另:本题多测,多测不清空,爆零两行泪。

题意翻译

\(a_1,a_2, \dots ,a_n\) 是 \(1\) 至 \(n\) 的一个排列,记 \(d_i=\gcd(a_i,a_{i\bmod n+1})\)。构造一个 \(\{a\}\),使 \(\{d\}\) 中不同元素的个数最大。

知识点

数论,贪心,构造。

做法

显然,首先显然有 \(\max\{d_i\}=\frac{n}{2}\),因为如果 $d_i > n/2 $,则必有另一个 \(d_i > n\),而这是不可能的。

所以我们可以尝试构造出一个 \(\{d\}\),使其中不同元素个数为 \(\frac{n}{2}\),这样就能使 \(\{d\}\) 中不同元素的个数最大。

贪心地想,我们从小到大枚举,对于每一个未插入的数 \(a_i\) 且 \(a_i \le \frac{n}{2}\),直接把 \(2a_i\) 插入 \(a_i\) 的后面,直到 \(2a_i > n\),。接着继续枚举。

通过此方式枚举,显然对于每个 \(a_i \le \frac{n}{2}\) 都能成为 \(\{d\}\) 中的某个数,这么做就是最优的。

时间复杂度 \(O(n)=\sum n\)。

Code

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
	while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
int t;
int vis[N],ans[N];//vis数组为标记数组,ans数组即为答案序列
int main(){
	t=read();
	while(t--){
		int n=read(),cnt=0;
		memset(vis,0,sizeof(vis));
		memset(ans,0,sizeof(ans));
		for(int i=1;i<=n/2;i++){//只枚到 n/2
			int j=i;
			if(vis[j]) continue;
			while(j<=n){
				ans[++cnt]=j;
				vis[j]=1;//标记,防止重复枚举
				j*=2;
			}
			
		}
		for(int i=n/2+1;i<=n;i++){//剩下的没标记过的直接填上去即可
			if(!vis[i]) ans[++cnt]=i;
		}
		for(int i=1;i<=n;i++) printf("%d ",ans[i]);
		printf("\n");
	}
	return 0;
}

标签:ch,frac,CF1858C,int,题解,枚举,Another,include
From: https://www.cnblogs.com/qwerasdasd1/p/17633093.html

相关文章

  • CF1188D Make Equal 题解
    题意给定\(n\)个数\(a_1,a_2,\cdots,a_n\),每次操作可以给其中的一个数加上\(2\)的非负整数次幂。求最小的操作次数,使得这\(n\)个数相等。题解首先考虑如何计算操作次数,设\(maxa=\max\limits_{i=1}^{n}a_i\),如果我们把这\(n\)个数操作成了数\(x\)(\(x\gemax......
  • [ARC096E] Everything on It 题解
    题意对于集合\({1,2,\cdots,n}\),求它的子集族中,有多少个满足:任意两个子集互不相同;\(1,2,\cdots,n\)都在其中至少出现了\(2\)次。\(n\le3000\),答案对\(M\)取模。题解第一个限制形同虚设,下面着重考虑第二个限制。考虑到第二个限制集合的每个元素都是等价的,考虑二项......
  • [ABC134F] Permutation Oddness 题解
    题面定义一个\(1\simn\)的排列\(p\)的「怪异度」为\[\sum_{i=1}^n\left\lvertp_i-i\right\rvert\]求「怪异度」为\(k\)的\(1\simn\)的排列数,答案对\(10^9+7\)取模。题解考虑转化计算怪异度的过程,我们将值\(p_i\)排列在左侧,将下标\(i\)排列在右侧,构成一个......
  • 『题解』ABC261Ex Game on Graph
    题目链接震惊!这个题竟然被神犇szs放进了博弈论里!我真的没看出来除了题面还有哪里像博弈论(也许是因为我菜)。转移方式很显然,按照题面说的做就行了。那么正解也就呼之欲出了。但是我知道大家都会正解,就是魔改的堆优化Dijkstra,所以我想说的是一种歪解,以及它是歪解的原因。歪解......
  • 国标GB28181视频平台EasyGBS国标平台设备播放断流现象的问题解决方案
    安防视频监控EasyGBS平台基于国标GB28181协议,支持多路设备接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等多种格式的视频流。平台可为大数据等综合性监管平台提供极强的视频能力,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。有用户反馈,在安防视频监......
  • 视频汇聚平台EasyCVR安防监控视频汇聚平台的FLV视频流在VLC中无法播放的问题解决方案
    众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议国标GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。在视频流的处理与分发上,视频监控汇聚平台EasyCVR的性能也同样表现得很优秀,平台可对外分发多格式的视......
  • [Luogu P8716] 回文日期 题解
    STEP1:分析题目大意:给定一个8位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA型的回文日期各是哪一天。这一题一眼看出是P2010的升级版,所以要先考虑到超时问题,因为如果一天一天地枚举,时间复杂度会非常高,所以我们不能直接枚举。因为题目只要"回文",所以我们只......
  • [JOI 2023 Final] Advertisement 2 题解
    题解JOI王国有\(N\)位居民,从\(1\)到\(N\)编号。居民\(i\)(\(1\lei\leN\))居住在数轴上坐标\(X_i\)处,其影响力为\(E_i\)。同一个坐标可能住了多于一位居民。居民的影响力越高,广告效应也越高,但买书也越谨慎。Rie出版了一本关于信息学的书。为了让更多人购买这本书,她可......
  • 【免费分享 图书】《阿里云天池大赛赛题解析——深度学习篇》-PDF电子书-百度云
    找这本书的资源简直要把我找吐了,各种网站压缩包一下下来就开始各种套路(比如要你充钱)为了防止还有我这样的受害者,这就把找到的PDF给大家分享一下。链接在文章最后如果这篇文章能够帮到您,麻烦帮我点个赞,并关注一下我,我将有更多动力,持续分享更多有用图书给您!非常感谢,不胜感激!(点......
  • P3629 巡逻 LCA题解
    原题:洛谷P3629问题转化首先,给定的图是一个有\(n\)个点,\(n-1\)条边的无向连通图,这个图就等价于一棵树。不建立新的道路时,从\(1\)号节点出发,把整棵树上的每条边遍历至少一次,再回到\(1\)号节点,会恰好经过每条边两次,路线总长度为\(2(n-1)\),如下图最左边的部分所示。根据树......