首页 > 其他分享 >[题解]CF1741B Funny Permutation

[题解]CF1741B Funny Permutation

时间:2024-06-24 12:32:05浏览次数:25  
标签:wedge Funny int 题解 偶数 leq 输出 Permutation neq

思路

简单构造题,我们可以分为三种情况进行构造。

  1. \(n = 3\) 时,一定无解,输出 -1。(你可以试试)

  2. \(n \bmod 2 = 1 \wedge n \neq 3\) 时,我们直接先输出 \(n,n - 1\),然后顺序输出即可。

证明:令 \(a\) 为最后构造出的序列。那么,\(a_1 = n,a_2 = n - 1,a_i = i - 2(3 \leq i \leq n)\)。

首先判断 \(a_1,a_2\),因为我们已经特判过 \(3\) 了,因此 \(1 \neq n \wedge 2 \neq n -1\)。

再来看后面的,因为 \(a_i = i + 2\),所以 \(a_i\) 一定不等于 \(i\)。

又因为,\(a_1 = a_2 + 1 \wedge a_i = a_{i + 1} - 1(3 \leq i \leq n)\)。

因此,上述构造方法成立。

  1. \(n \bmod 2 = 0\) 时,直接逆序输出即可。

证明:令 \(a\) 为最后构造出的序列,那么 \(a_i = n - i + 1\)。

因为 \(n\) 为偶数。

所以:

  • \(i\) 为偶数时,\(a_i\) 为奇数。

  • \(i\) 为奇数时,\(a_i\) 为偶数。

又因为,一奇一偶一定互不相同且 \(a_i = a_{i - 1} + 1\),满足题目要求。

因此,上述构造方法正确。

Code

#include <bits/stdc++.h>
#define re register

using namespace std;

int T,n;

inline int read(){
	int r = 0,w = 1;
	char c = getchar();
	while (c < '0' || c > '9'){
		if (c == '-') w = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9'){
		r = (r << 3) + (r << 1) + c - 48;
		c = getchar();
	}
	return r * w;
}

int main(){
	T = read();
	while (T--){
		n = read();
		if (n == 3) puts("-1");//特判 
		else if (n & 1){
			// n,(n-1),1,2,3,...,(n-2)
			//这样无论如何也不会重复 
			printf("%d %d ",n,n - 1); 
			for (re int i = 1;i <= n - 2;i++) printf("%d ",i);
			puts("");
		}
		else{
			// n,(n-1),(n-2),...,3,2,1
			//因为 n 为偶数,所以也不会有重复 
			for (re int i = n;i;i--) printf("%d ",i);
			puts("");
		}
	}
	return 0;
}

标签:wedge,Funny,int,题解,偶数,leq,输出,Permutation,neq
From: https://www.cnblogs.com/WaterSun/p/18264806

相关文章

  • [题解]CF1732C2 Sheikh (Hard Version)
    思路首先证明一下当序列扩大时答案一定不劣。考虑\(f(l,r)\)到\(f(l,r+1)\)的变化。\[\begin{aligned}f(l,r)-f(l,r+1)&=s_{l,r}-xs_{l,r}-s_{l,r+1}+xs_{l,r+1}\\&=xs_{l,r+1}-xs_{l,r}-a_{r+1}\\&......
  • fdisk时WARNING: Re-reading the partition table failed with error 16: 设备或资源
    WARNING:Re-readingthepartitiontablefailedwitherror16:设备或资源现象:划分磁盘有警告, WARNING:Re-readingthepartitiontablefailedwitherror16:设备或资源忙.Thekernelstillusestheoldtable.Thenewtablewillbeusedatthenextrebootoraft......
  • P3974 [TJOI2015] 组合数学 题解
    Description给一个网格图,其中某些格子有一些财宝。每次从左上角出发,只能往右或下走,每一次经过一个格子至多只能捡走一块财宝,至少要走几次才可能把财宝全捡完?\(1\leqn\leq1000\),\(1\leqm\leq1000\),每个格子中的财宝不超过\(10^6\)块。Solution考虑把每个点\((i,j)\)......
  • [题解]CF1066E Binary Numbers AND Sum
    思路考虑对于每一个\(a\)上数位进行分析。令\(a_i\)表示\(a\)在二进制表示中从左往右数的第\(i\)位上的数字,\(b_i\)同理。分类讨论一下\(a_i\)的取值对于答案的贡献:如果\(a_i=0\),对于这一位无论如何都不会拥有贡献。如果\(a_i=1\),因为\(b\)会向右移,所以能......
  • [题解]CF1061C Multiplicity
    题意给定一个长度为\(n\)的序列\(\{a_1,a_2,\dots,a_n\}\)。现在要在\(a\)选出非空子序列\(\{b_1,b_2,\dots,b_m\}\),使得所有的\(i\in[1,m]\),都有\(b_i\bmodi=0\)。求能够选取\(b\)序列的方案数模\(10^9+7\)的值。思路定义\(dp_{i,j}\)表示在\(\{a_1,a......
  • [题解]P2042 [NOI2005] 维护数列 - Splay解法
    P2042[NOI2005]维护数列一道思路不难,但实现细节很多的平衡树题,调了一天半终于做出来了w。对于初始序列,我们可以直接构建一条链(毕竟一个一个调用插入函数也可能形成一条链)。题解有递归直接构建成一棵严格平衡的二叉树的,这样也可以,常数可能会小一点。其中区间反转就是裸的文艺......
  • [MdOI R5] Many Minimizations & [ARC164F] Many Increasing Problems 题解
    讲下一个思路比较自然的基于自然数幂和的\(O(n\logn)\)且复杂度与\(m\)几乎无关的做法。不难发现让我们计数的问题是保序回归\(L_1\)中一条链的情况。这个情况有一个简单的slope-trick做法:用堆维护斜率,每次push进去两个当前的数,然后pop出一个最大值。最终所有数的和......
  • [MdOI R5] Many Minimizations & [ARC164F] Many Increasing Problems 题解
    讲下一个思路比较自然的基于自然数幂和的\(O(n\logn)\)且复杂度与\(m\)几乎无关的做法。不难发现让我们计数的问题是保序回归\(L_1\)中一条链的情况。这个情况有一个简单的slope-trick做法:用堆维护斜率,每次push进去两个当前的数,然后pop出一个最大值。最终所有数的和......
  • C++题解(1) 信息学奥赛一本通 1003:对齐输出 洛谷 B2004:对齐输出 土豆编程 T1003:对
    【题目描述】读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。【输入】只有一行,包含三个整数,整数之间以一个空格分开。【输出】只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。【输入样例】......
  • 一些东西 题解
    ATBAB设\(f_{i,0/1}\)表示\(i\)子树DFS序奇/偶位置和的最大值,首先如果\(i\)所有孩子的子树大小都是偶数,那访问这些孩子的顺序就无所谓了,否则考虑以\(i\)的至少一个大小为奇数的孩子为分界,对所有大小为偶数的孩子\(v\),把\(f_{v,0}\)更大的\(v\)、\(f_{v,1}\)......