40pts求助
查看原帖
40pts求助
904938
pb0000楼主2023/8/21 16:10

感觉思路没问题,求DALAO改改

#include<iostream>
#include<cstring>
#include<map>
#include<vector>
using namespace std;
int t,n,p;
bool vis[100005];
int mod[100005];
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n>>p;
		map<int,int> m;
		vector<int> a;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;i++)
		{
			mod[i]=i%p;
			if(mod[i]==0)
			{
				cout<<i<<' ';
				vis[i]=1;
			}
			else if(m[p-mod[i]]!=0)
			{
				vis[i]=1;
				vis[m[p-mod[i]]]=1;
				a.push_back(m[p-mod[i]]);
				m[p-mod[i]]=0;
				a.push_back(i);
			}
			else m[mod[i]]=i;
		}
		for(int i=0;i<a.size();i++) cout<<a[i]<<' ';
		for(int i=1;i<=n;i++)
			if(!vis[i]) cout<<i<<' ';
		cout<<'\n';
	}
	return 0;
}
2023/8/21 16:10
加载中...