洛谷传送门: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后,要重新审题,看看是不是哪里理解错了
*/