Thứ Sáu, 16 tháng 11, 2012

Problem Dividing Orange

Link: http://codeforces.com/problemset/problem/244/A

A. Dividing Orange
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
One day Ms Swan bought an orange in a shop. The orange consisted of n·k segments, numbered with integers from 1 to n·k.
There were k children waiting for Ms Swan at home. The children have recently learned about the orange and they decided to divide it between them. For that each child took a piece of paper and wrote the number of the segment that he would like to get: the i-th (1 ≤ i ≤ k) child wrote the number ai (1 ≤ ai ≤ n·k). All numbers ai accidentally turned out to be different.
Now the children wonder, how to divide the orange so as to meet these conditions:
  • each child gets exactly n orange segments;
  • the i-th child gets the segment with number ai for sure;
  • no segment goes to two children simultaneously.
Help the children, divide the orange and fulfill the requirements, described above.
Input
The first line contains two integers nk (1 ≤ n, k ≤ 30). The second line contains k space-separated integers a1, a2, ..., ak (1 ≤ ai ≤ n·k), where ai is the number of the orange segment that the i-th child would like to get.
It is guaranteed that all numbers ai are distinct.
Output
Print exactly n·k distinct integers. The first n integers represent the indexes of the segments the first child will get, the second n integers represent the indexes of the segments the second child will get, and so on. Separate the printed numbers with whitespaces.
You can print a child's segment indexes in any order. It is guaranteed that the answer always exists. If there are multiple correct answers, print any of them.
Sample test(s)
input
2 2
4 1
output
2 4 
1 3 
input
3 1
2
output
3 2 1 



Code:


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<set>
#include<vector>
#include<utility>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>


using namespace std;

#define oo 1000000005
#define N 100005
#define rep(i,s,e) for(int i = s; i < e; i++)
#define lop(i,s,e) for(int i = s; i != e; i++)
#define FOR(it,c) for(__typeof((c).begin()) it = (c).begin(); it != (c).end(); it++)
#define SZ(x) ((int)(x).size())
#define X first
#define Y second

typedef pair<int,int> II;
typedef pair<II,int> D;
typedef long long LL;

vector<int> V;
map<int,int> M;
set<int> S;
queue<int> Q;
stack<int> ST;

int n,k,x;
int a[31];

int main()
{
    #define Off  false
    if(Off)
    {
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    }   
    cin >> n >> k;
    rep(i,0,k)
    {
        cin >> a[i];
        S.insert(a[i]);
    }
        
    rep(i,0,k)
    {
        cout << a[i] << " ";
        int count = 1;
            rep(j, 1, n * k +1)
            {
                if(S.find(j) == S.end())
                {
                    cout << j << " ";
                    S.insert(j);    
                    count++;
                }
                if(count == n)break;
            }
        cout << endl;
    }
    return 0;
}



Không có nhận xét nào:

Đăng nhận xét