首页 > 其他分享 >CF1719B Mathematical Circus 题解

CF1719B Mathematical Circus 题解

时间:2022-08-17 18:35:21浏览次数:70  
标签:Mathematical 放在 位置 奇数 题解 Circus times 偶数 整除

一道不错的构造题。

思路

先说一句废话,能被 \(4\) 整除的数在除以 \(2\) 之后得到的数还是一个偶数。

我们可以根据 \(k\) 的奇偶性以及 \(k\) 除以 \(2\) 之后的奇偶性分成三种情况来进行讨论。

当 \(k\) 为奇数时,我们把所有偶数都放在 \(b\) 的位置上,把所有的奇数都放在 \(a\) 的位置上,因为奇数 \(+\) 奇数 \(=\) 偶数,这样可以保证每个 $(a + k) \cdot b $ 都是两个偶数相乘,两个偶数相乘的结果一定可以被 \(4\) 整除。

当 \(k\) 为偶数且 \(\dfrac{k}{2}\) 为奇数时,我们把所有能被 \(4\) 整除的偶数放在 \(b\) 的位置上,并任找一个奇数放在 \(a\) 的位置上即可,对于那些不能被 \(4\) 整除的偶数,我们可以把它放在 \(a\) 的位置上,把任意一个奇数放在 \(b\) 的位置上,原因很简单,我们设 \(k=2\times p\),其中 \(p\) 为一个奇数,设相对的偶数 \(a\) 为 \(a=2\times q\),其中 \(q\) 为一个奇数。这时 \((a+k)=2\times (p+q)\)。
因为 \(p\) 和 \(q\) 都是奇数,它们的和是一个偶数,两个偶数的积一定可以被 \(4\) 整除,这时后让 \(b\) 等于任意一个奇数即可。

当 \(k\) 为偶数且 \(\dfrac{k}{2}\) 为奇数时,我们把所有能被 \(4\) 整除的偶数放在 \(b\) 的位置上,并任找一个奇数放在 \(a\) 的位置上即可,对于那些不能被 \(4\) 整除的偶数,我们可以把它放在 \(a\) 的位置上,把任意一个奇数放在 \(b\) 的位置上,原因很简单,我们设 \(k=2\times p\),其中 \(p\) 为一个奇数,设相对的偶数 \(a\) 为 \(a=2\times q\),其中 \(q\) 为一个奇数。这时 \((a+k)=2\times (p+q)\)。

当 \(k\) 为偶数且 \(\dfrac{k}{2}\) 为奇偶数时,类比上面的过程,那些不能被 \(4\) 整除的偶数没有搭配对象,无论如何都不能被 \(4\) 整除,此时无解。

代码

#include <bits/stdc++.h>
using namespace std;
int t, n, k;

int main() {
	scanf("%d", &t);

	while (t--) {
		scanf("%d%d", &n, &k);

		if (k & 1) {
			puts("YES");

			for (int i = 1; i <= n; i += 2) {

				printf("%d %d\n", i, i + 1);
			}
		} else {
			if ((k >> 1) & 1) {
				puts("YES");

				for (int i = 1; i <= n; i += 2) {

					if (((i + 1) >> 1) & 1) {
						printf("%d %d\n", i + 1, i);
					} else {
						printf("%d %d\n", i, i + 1);
					}

				}
			} else {
				puts("NO");
			}
		}
	}

	return 0;
}

标签:Mathematical,放在,位置,奇数,题解,Circus,times,偶数,整除
From: https://www.cnblogs.com/Dregen-Yor/p/16596323.html

相关文章

  • BSOJ7020题解
    脑抽了。考场上应该做掉这题的。所以实际挂分从100pts变成了200pts/fn/fn/fn考虑用一个二元组来维护链,\((f,g)\)表示这个集合的所有链的点权和为\(f\),有\(g\)条链,目......
  • CF1719B Mathematical Circus
     题意简述:对于给定的$n,k$,能否将$1,2,3,...,n$($n$为偶数),两两分组.求对于每个分组($x_i$,$y_i$),是否全部满足$4\mid(x_i+k)*y_i$,如果分组全部......
  • 针对“RuntimeError: each element in list of batch should be of equal size” 问题
    第一次运行代码出现了这个问题:这个问题的出现主要来源于DataLoader类中的collate.py文件造成的问题,由于每个batch里的长度不一致,因此导致出现了该问题。通过百度方法和......
  • 「AGC012F」Prefix Median 题解 (DP)
    题目简介给定一个长度为\(2n-1\)的序列\(a\),你可以随意排列\(a\)中的元素,请求出有多少种不同的序列\(b\),满足\(b\)的长度为\(n\)。\(b_i=\{a_1\ldotsa_{2......
  • 洛谷P1972HH的项链 题解
    P1972[SDOI2009]HH的项链题目描述HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含......
  • LeetCode 螺旋矩阵 II 算法题解 All In One
    LeetCode螺旋矩阵II算法题解AllInOnejs/ts生成螺旋矩阵螺旋矩阵原理图解动态赋值arr[i]//动态更新indexleti=0;while(left<=right&&t......
  • ARC094D题解
    设\(A<B\),\(C=\max(\sqrt{AB-1},A)\),答案为:\[C-1+\frac{AB-1}{C+1}\]如果\(A>B\)时显然可以互换,接下来称\(A\)所在的比赛为第一场比赛,\(B\)所在的比赛为第二场比赛......
  • 题解 [ZJOI2010]排列计数
    好题。%你赛考到了不会摆烂,后来发现原来有向下取整,题面没有。。。(就算有我也做不出来啦qAq首先我们会发现这个长得就是小根堆,答案就变成了小根堆的计数。首先最小的......
  • ubuntu16.04中文乱码问题解决
    1、先输入locale-a,查看一下现在已安装的语言2、若不存在如zh_CN之类的语言包,进行中文语言包装:apt-getinstalllanguage-pack-zh-hans3、安装好后我们可以进行临时修......
  • LeetCode 反转链表算法题解 All In One
    LeetCode反转链表算法题解AllInOnejs/ts实现反转链表反转链表原理图解双指针,swap交换//反转双指针//swap:a=b;c=a;b=c;letprev:List......