T419234 军团
复制题目内容如下:
蹦哒啦共和国准备从国家精锐战士中选出n名战士组成若干个军团,每个战士都有自己的编号并且互不相同。为了方便分配阵营指挥官将战士的编号取模k余数相同的放入同一军团。
余数为0的放入0号军团,依次类推余数为k-1的放入k-1号军团。
为了应对接下来的战斗蹦哒啦共和国的总司令需要每个军团中战士的编号。请你利用蹦哒啦共和国的计算机编程并按照0号军团至k-1号军团的顺序按从小到大的顺序输出每个军团战士的编号,若该军团人数为0则不输出。
第一行输入两个正整数n和k,代表n个战士和取模的数k。1<=n<=106,1<=k<=109
第二行输入n个正整数,第i个数为ai代表战士的编号。1<=ai<=1018
输出若干行,每行第一个数代表该军团人数 m,然后从小到大输出 m 个正整数代表该军团战士编号。
10 5
12 2 38 17 7 5 64 10 13 94
2 5 10
4 2 7 12 17
2 13 38
2 64 94
0号军团2人编号为5 10
1号军团0人
2号军团4人编号为4 2 7 12 17
3号军团2人编号为13 38
4号军团2人编号为64 94
不废话,上代码:
#include<bits/stdc++.h>
using namespace std;
map<int,vector<int>> mp;
map<int,vector<int>>::iterator it;
int main()
{
int n,k,t,v;
cin>>n>>k;
for(int i=0;i<n;i++)
{
cin>>t;
v=t%k;
mp[v].push_back(t);
}
for(it=mp.begin();it!=mp.end();it++)
{
if(it->second.empty())
continue;
printf("%d ",it->second.size());
for(auto i:it->second)
{
printf("%d ",it->second[i]);
}
printf("\n");
}
return 0;
}
输入内容:
10 5
12 2 38 17 7 5 64 10 13 94
输出内容:
2 1635017028 -870835984
4 0 17 1952531568 268462141
2 -870837200 0
2 0 -8708420032