rt,scored 40pts.
#include<bits/stdc++.h>
using namespace std;
int read() {
register int x = 0,f = 1;register char ch;
ch = getchar();
while(ch > '9' || ch < '0'){if(ch == '-') f = -f;ch = getchar();}
while(ch <= '9' && ch >= '0'){x = x * 10 + ch - 48;ch = getchar();}
return x * f;
}
void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>9){write(x/10);putchar(x%10+'0');}
else putchar(x+'0');
return;
}
int n,p;
int main(){
int T;
T=read();
while(T--){
bool k[100001]={0};
n=read();p=read();
if(p-n>=n){
for(int i=1;i<=n;i++){
write(i);putchar(32);
}
}
else if(p-n>=0){
for(int i=1;i<=n;i++){
if(p-i<=n && p-i>0 && !k[i] && !k[p-i] && p-i!=i){
write(i);putchar(32);write(p-i);putchar(32);
k[i]=1,k[p-i]=1;
}
}
for(int i=1;i<=n;i++){
if(!k[i]){
write(i);putchar(32);
}
}
}
else if(p!=2){
printf("1 ");k[1]=1;
int x=1,y=p-1,lx=1,next=2;
for(int i=2;i<=n;i++){
if(!k[y] && y<=n && y>0){
write(y);putchar(32);
lx++,x=y,k[y]=1,y=p*lx-x;
}
else{
for(int j=next;j<=n;j++){if(k[j]==0){next=j;break;}}
x=next,y=p-x;k[x]=1,lx=1;
write(x);putchar(32);
}
}
}
else{
for(int i=1;i<=n;i+=2){
write(i);putchar(32);
}
for(int i=2;i<=n;i+=2){
write(i),putchar(32);
}
}
putchar(10);
}
return 0;
}
我写这么大长串带码干啥...