L1-6 分配糖果 (15 分)
新的学期来了,幼儿园来了一些新的小朋友,小红老师要给他们分配糖果。总共有n个小朋友,下标从0到n−1, 小红老师有m个糖果要分配给他们,糖果的甜蜜度分别为b1,b2,b3,...,bm. 对于第i次分配,小红老师会把第i个糖果分配给下标为bimodn的小朋友。
现在需要你依次输出下标从0到n−1这些小朋友获得的糖果数量,以及获得糖果的甜蜜度从小到大依次是多少。
输入格式:
第一行两个正整数n(1≤n≤100000)和m(1≤m≤200000)
第二行有m个正整数,表示b1,b2...,bm
输出格式:
共n行,每行若干个整数。
每i+1行的第一个k表示下标为i的小朋友获得糖果的数量,接下来k个整数表示这个小朋友获得糖果的甜蜜度从小到大是多少。
输入样例:
3 5
4 2 1 1 5
输出样例:
0
3 1 1 4
2 2 5
第1个糖果分配给下标为4mod3=1的小朋友
第2个糖果分配给下标为2mod3=2的小朋友
第3个糖果分配给下标为1mod3=1的小朋友
第4个糖果分配给下标为1mod3=1的小朋友
第5个糖果分配给下标为5mod3=2的小朋友
因此,下标为0的小朋友没有获得糖果,下标为1的小朋友获得了3个糖果,下标为2的小朋友获得了2个糖果。
作者arbalest
单位河北大学
代码长度限制16 KB
时间限制400 ms
内存限制64 MB
太久不写代码了,脑子退化了。。。。。。
感谢我亲爱美丽善良大方得体可爱的舍友提供的答案。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
int n,m;
vector<vector<int> >v(N);
int main() {
cin >> n >> m;
for(int i = 0; i < m; i ++) {
int x;
cin >> x;
v[x % n].push_back(x);
}
for(int i = 0; i < n; i ++) {
sort(v[i].begin(),v[i].end());
}
for(int i = 0; i < n; i ++) {
cout << v[i].size();
for(int j = 0; j < v[i].size() ; j ++) {
cout << " " <<v[i][j];
}
cout << endl;
}
return 0;
}