题目Dividing Orange

题目链接:https://vjudge.net/problem/CodeForces-244A

题目大意:

这题读起来很迷,其实就是给一个1~n*k的编号,有k个人每人需要n个号,其中必须含有他指定的一个号,保证这些编号不重复使用。

思路:

对这些编号中被指定的号进行标记,每次输出时先输出那个人需要的号,再输出其他的n-1个数即可。

解题代码:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cmath>
 5 #include <string>
 6 #include <cstring>
 7 #include <map>
 8 using namespace std;
 9 const long long N = 1e9 + 7;
10 typedef long long ll;
11 map <int,int> ma;
12 int a[110];
13 int main()
14 {
15     int n,k,num = 1;
16     cin >> n >> k;
17     for(int i = 1;i <= n*k ;i++)  //初始化标号
18         ma[i] = i;
19     for(int i = 1;i <= k;i++)  //记录每个人需要的标号
20     {
21         cin >> a[i];
22         ma[a[i]] = 0;
23     }
24     for(int i = 1;i <= k;i++)
25     {
26         cout << a[i];  //先输出需要的那个标号
27         int point = 1; //记录输出个数
28         while(point < n)
29         {
30             if(ma[num])
31             {
32                  cout << " " << ma[num++];
33                  point++;
34             }
35             else
36                 num++;    //该标号被占用,再向下寻找。
37 
38         }
39         cout << endl;
40 
41     }
42 
43     return 0;
44 }