赛时有点脑抽,貌似 40 分但是错的点和大部分人都不一样(?)
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main()
{
int t;
cin>>t;
while(t--){
map<int,bool>mp;
int n,p;
cin>>n>>p;
if(p==2){
for(int i=1;i<=n;i+=2)cout<<i<<' ';
for(int i=2;i<=n;i+=2)cout<<i<<' ';
}
else {
for(int i=1;i<=n;i++){
if(mp[i])continue;
int s=p,t=i;
while(t<=n&&t>0&&!mp[t]){
cout<<t<<' ';
mp[t]=1;
t=s-t;
s+=p;
}
}
}
puts("");
}
}
思路就是 n 个数跑,然后能凑成 p 的倍数的输出,之后遇到就不算了。