当前位置: 首页 > 工具软件 > Circus > 使用案例 >

CF1719B Mathematical Circus 题解

顾宸
2023-12-01

洛谷传送门:Mathematical Circus - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

难度:普及-

知识点:数论,思维题(分类讨论)

思路:

        观察样例,都是12,34这样搭配的,只有这种搭配,才有完整的n/2组答案

        如果k是奇数,一定有全解

         因为n是偶数,有因子2,然后(奇数n-1)+(奇数k)= 偶数,又有因子2。相乘一定被4整除

        如果k是偶数,满足(2+k)%4==0的才行

        关于构造,因为a和b是有序的,所以构造成这个样子:21,34,65,78,10 9······

AC代码:

#include<bits/stdc++.h>
using namespace std;

int main(){
    int t,n,k; scanf("%d", &t);
    while(t--){
        scanf("%d %d", &n, &k);
        if(k%2==1){//k是奇数,一定行
            printf("YES\n");
            for(int i = 1; i<=n; i=i+2){
                printf("%d %d\n",i,i+1);
            }
        }
        else{//k是偶数
            if((2+k)%4==0){
                printf("YES\n");
                for(int i = 4; i<=n; i=i+4){//b是4的倍数
                    printf("%d %d\n",i-1,i);
                }
                for(int i = 2; i-1<=n; i=i+4){//(a+k)是4的倍数
                    printf("%d %d\n",i,i-1);
                }
            }
            else printf("NO\n");
        }
    }
    return 0;
}

/*
知识点:数论,思维题(分类讨论)

思路:
观察样例,都是12,34这样搭配的,只有这种搭配,才有完整的n/2组答案
如果k是奇数,一定有全解
    因为n是偶数,有因子2,然后(奇数n-1)+(奇数k)= 偶数,又有因子2。相乘一定被4整除
如果k是偶数,满足(2+k)%4==0的才行
关于构造,因为a和b是有序的
所以构造成这个样子:21,34,65,78,10 9······

心路历程:
30min,wa了
思考,但想不出错因,看题解
看了一两行,突然有思路,回去改,还是wa了

重新读题,特别是读英文,发现“给定 n,k 是否存在合法解”
这里的“合法解”不是有解就行,是要全部解,1到n都要有输出
所以不是枚举存在的解,是要找出可以有全解的n

反思:题目比较绕的时候,wa后,要重新审题,看看是不是哪里理解错了

*/

 类似资料: