[Google Codejam] Round 1A 2016 - Rank and File

[Problem Description]

Problem

When Sergeant Argus's army assembles for drilling, they stand in the shape of an N by Nsquare grid, with exactly one soldier in each cell. Each soldier has a certain height.

Argus believes that it is important to keep an eye on all of his soldiers at all times. Since he likes to look at the grid from the upper left, he requires that:

  • Within every row of the grid, the soldiers' heights must be in strictly increasing order, from left to right.
  • Within every column of the grid, the soldiers' heights must be in strictly increasing order, from top to bottom.

Although no two soldiers in the same row or column may have the same height, it is possible for multiple soldiers in the grid to have the same height.

Since soldiers sometimes train separately with their row or their column, Argus has asked you to make a report consisting of 2*N lists of the soldiers' heights: one representing each row (in left-to-right order) and column (in top-to-bottom order). As you surveyed the soldiers, you only had small pieces of paper to write on, so you wrote each list on a separate piece of paper. However, on your way back to your office, you were startled by a loud bugle blast and you dropped all of the pieces of paper, and the wind blew one away before you could recover it! The other pieces of paper are now in no particular order, and you can't even remember which lists represent rows and which represent columns, since you didn't write that down.

You know that Argus will make you do hundreds of push-ups if you give him an incomplete report. Can you figure out what the missing list is?

Input

The first line of the input gives the number of test cases, T. T test cases follow. Each consists of one line with an integer N, followed by 2*N-1 lines of N integers each, representing the lists you have, as described in the statement. It is guaranteed that these lists represent all but one of the rows and columns from a valid grid, as described in the statement.

Output

For each test case, output one line containing Case #x: y, where x is the test case number (starting from 1) and y is a list of N integers in strictly increasing order, representing the missing list.

Limits

1 ≤ T ≤ 50.
1 ≤ all heights ≤ 2500.
The integers on each line will be in strictly increasing order.
It is guaranteed that a unique valid answer exists.

Small dataset

2 ≤ N ≤ 10.

Large dataset

2 ≤ N ≤ 50.

Sample


Input 
 

Output 
 
1
3
1 2 3
2 3 5
3 5 6
2 3 4
1 2 3

Case #1: 3 4 6

In the sample case, the arrangement must be either this:

1 2 3
2 3 4
3 5 6

or this:

1 2 3
2 3 5
3 4 6

In either case, the missing list is 3 4 6.


[Problem Analysis]

It is tempting to think it in a rather complicated way. However, the solution is very simple, if you observe a very important property. That is: each soldier appears exactly twice in your files, once when you record in row and once when you record in column.  So, each number must appear even times in the files. If one file is missed, what happened? If you lost the file recording a row, each number will have appeared once in the columns. These numbers will appear for odd times! What's more, only these lost numbers appear in odd times! Problem becomes easy, since we just need to find the numbers which appears for odd times in the left files. Remember to sort them before output! The solution in Python is shown below.


[Problem Solution]

    T = int(raw_input())
    for t in xrange(1, T+1):
        N = int(raw_input())
        ls = []
        for _ in xrange(2*N-1):
            l = [int(i) for i in raw_input().split(' ')]
            ls.append(l)
        nums = []
        for l in ls:
            nums += l
        c = Counter(nums)
        res = []
        for i in c:
            if c[i] % 2 == 1:
                res.append(i)
        res.sort()
        res = [str(i) for i in res]
        res = ' '.join(res)
        print 'Case #{}: {}'.format(t, res)

[Comment]

If one way is too long and obstructive, just have a rest and think in another way. There is an Chinese poetry illustrating this quite appropriately: "山重水复疑无路,柳暗花明又一村"是也。


[Source]

https://code.google.com/codejam/contest/4304486/dashboard#s=p1



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值