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

CF1719B Mathematical Circus

作者:互联网

题链:cf luogu

分类讨论思想。

Description

把 \(1\) 到 \(n\) 共 \(n\) 个整数分成 \(\frac{n}{2}\) 对有序数对 \(\left(a_i, b_i\right)\),则对于 \(\forall \left(a_i, b_i\right), 4\mid(a_i+k)\times b_i\)。问合法方案是否存在,若存在给出一组合法方案。

Analysis

既然是与被 \(4\) 整除有关,那么我们可以对 \(4\) 这个数进行分析。

\[4=4\times 1=1\times 4=2\times 2 \]

即三种情况,简记为:\(p\times 4q\),\(4p\times q\),\(2p\times 2q\)。

显然可以使所有 \(x\left(4\mid x,x\in \left[1,n\right],x\in\mathbb{Z}\right)\) 尽量放在 \(b\) 的位置,\(a\) 选择奇数,此时方案一定最优,共能匹配 \(\frac{n}{2}\) 个数字。也就是说还剩 \(\frac{n}{2}\) 没有完成匹配,其中有一半奇数,一半偶数(\(4x+2\) 型)。

对于剩余的 \(\frac{n}{2}\) 个数,我们考虑通过 \(a+k\) 或 \(b\) 与 \(a+k\) 配合使被 \(4\) 整除,此时我们需要对 \(k\) 的性质进行讨论。

  1. \(4\mid k\),加 \(k\) 之后对 \(\left(a+k\right)\times b\pmod4\) 无任何影响,即一定无法匹配;
  2. \(k\equiv2\pmod4\):使 \(b\) 为偶数即 \(a\equiv2\pmod4\),此时 \(4\mid \left(a+k\right)\);
  3. \(k\equiv1\pmod4\) 或 \(k\equiv3\pmod4\),使 \(a\) 为奇数,\(b\) 为偶数,一定可以配成偶数 \(\times\) 偶数 的形式,此时可被 \(4\) 整除。

Code

代码细节较多。具体解释见注释。

#include <stdio.h>
int n, k;
int main(void) {
    int t; for (scanf("%d", &t); t--; ) {
        scanf("%d %d", &n, &k); //读入
        if (k % 4 == 0) puts("NO"); //NO 情况特判
        else {
            puts("YES");
            if (k & 1) { //k%4==2,使a%4==2
                for (int i = 1; i <= n; i += 2)
                    printf("%d %d\n", i, i + 1);
            }   
            else { //k 为奇数,使 a 为奇,b 为偶
                for (int i = 3; i <= n; i += 4)
                    printf("%d %d\n", i, i + 1);
                for (int i = 2; i <= n; i += 4)
                    printf("%d %d\n", i, i - 1);
                putchar('\n');
            }
        }
    }
    return 0;
}

The end. Thanks.

(一键三连

标签:Mathematical,right,Circus,mid,times,偶数,pmod4,CF1719B,left
来源: https://www.cnblogs.com/dry-ice/p/cf1719b.html