ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1712B Woeful Permutation 题解

2022-08-15 17:30:08  阅读:132  来源: 互联网

标签:putchar gcd int 题解 scanf CF1712B Woeful lcm operatorname


题目传送门

题目简介

  • 给定一个正整数 \(n\),构造一个数列 \(p\),使 \(1\) 到 \(n\) 中每一个数都出现且只出现 \(1\) 次。

  • 求最大的 \(\sum\limits_{i=1}^n\operatorname{lcm}(i, p_i)\),并输出取得最大值时的数列。

思路

基础知识:\(\operatorname{lcm}(a,b)=\dfrac{a\times b}{\operatorname{gcd}(a,b)}\)。

\(\operatorname{gcd}(a,a+1)=1\)。

根据上面两个知识,我们可以得到相邻两项的 LCM 即为他们的乘积,根据贪心的思想,我们从后往前遍历,将相邻两项的位置互换,这样每次都会使相对较大的两个数相乘,使最终的结果最大,其中如果 \(n\) 是奇数,\(1\) 的位置不变即可。

代码

#include <bits/stdc++.h>
using namespace std;
int t,n;
int main() {
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		if(n&1){
			putchar('1');
			putchar(' ');
			for(int i=2;i<=n;i+=2){
				printf("%d %d ",i+1,i);
			}
			putchar('\n');
		}
		else{
			for(int i=1;i<=n;i+=2){
				printf("%d %d ",i+1,i);
			}
			putchar('\n');
		}
	}
	return 0;
} 

标签:putchar,gcd,int,题解,scanf,CF1712B,Woeful,lcm,operatorname
来源: https://www.cnblogs.com/Dregen-Yor/p/16589026.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有