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 }