题解 CF1719B
题解 CF1719B
这个题观察样例,可以发现,被选中的两个数,一定是相邻的两个数。
所以,我们只需要先循环一遍,看看有多少数满足,然后判断是否等于 n
。
如果等于说明可以 ,先输出 YES
,否则输出 NO
。
如果是 YES
,就直接再循环一遍,判断相邻的两个数,哪个是 \(+k\) 才能被 4
整除的,哪个是直接就可以 4
整除的。
先输出 \(+k\) 才能被 4
整除的。
然后输出直接就可以 4
整除的。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstring>
#include<stack>
#include<map>
#include<queue>
//#define int long long
using namespace std;
int T;
queue<int> q_o,q_n;
int main(){
scanf("%d",&T);
while(T--){
int n,k;
scanf("%d%d",&n,&k);
int f=0;
for(int i=1;i<=n;i+=2){
if((i+k)*(i+1)%4==0 || i*(i+1+k)%4==0){
f+=2;
}
}
if(f==n){
printf("YES\n");
for(int i=1;i<=n;i+=2){
if((i+k)*(i+1)%4==0 && i+1<=n){
printf("%d %d\n",i,i+1);
}else if(i*(i+1+k)%4==0 && i+1<=n){
printf("%d %d\n",i+1,i);
}
}
}else{
printf("NO\n");
}
}
return 0;
}