Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

VMFLOW - Nối điểm

Hiện tại, bài tập này đã có trên online judge chính thức của VNOI, bạn có thể truy cập ở đây: https://oj.vnoi.info/problem/vmflow


Với đồ họa và cách thức chơi vô cùng đơn giản, trò chơi Flow đang trở nên rất thịnh hành trong thời gian gần đây. Trong bài toán này, chúng ta sẽ cùng nhau thử tìm lời giải cho trò chơi này!

Trên một bảng kích thước N * N, có một số cặp điểm cần được nối với nhau. Như hình vẽ dưới đây, hai ô 
cùng màu là hai ô cần được nối với nhau.

Trên một bảng kích thước N * N, có một số cặp điểm cần được nối với nhau. Như hình vẽ dưới đây, hai ô cùng màu là hai ô cần được nối với nhau.

VMFLOW

Việc nối hai ô bất kì với nhau được thực hiện bằng cách đi theo các ô kề cạnh tạo thành một đường đi không tự cắt (đường đi không được đi qua một ô hai lần) và tới ô đích. Hình 1 dưới đây môt tả một đường đi hợp lệ nối hai ô đỏ.

VMFLOW

Các đường đi nối các cặp khác điểm khác nhau cũng không được phép có điểm chung với nhau. Hình 2 là một cách nối không hợp lệ. Vì vậy với cách nối cặp điểm màu đỏ như hình 1, chúng ta không có cách nối cặp điểm màu xanh lá.

Nhiệm vụ của bạn là hãy tìm một phương pháp nối các cặp điểm sao cho:

  • Số lượng cặp điểm nối được là nhiều nhất có thể.
  • Số lượng ô có đường đi đi qua là nhiều nhất có thể.

Input

  • Dòng đầu tiên ghi số N.
  • N dòng tiếp theo, mỗi dòng ghi một xâu N kí tự mô tả bảng ban đầu. Trong đó ô trống được kí hiệu bởi dấu chấm (.), các ô màu được kí hiệu bởi một chữ cái in hoa. 
  • Dữ liệu đảm bảo với mỗi màu (chữ cái in hoa) sẽ chỉ có đúng hai ô chứa nó.

Output

In ra bảng gồm N * N số mô tả cách nối, trong đó ô ở dòng u, cột v ghi thông tin về cách nối ở ô (u, v). Cách nối ở mỗi ô được mô tả bằng một số nguyên X trong đó:

  • Nếu ô (u, v) có nối lên trên thì bít thứ 0 (từ phải sang) của X bằng 1.
  • Nếu ô (u, v) có nối sang phải thì bít thứ 1 (từ phải sang) của X bằng 1.
  • Nếu ô (u, v) có nối xuống dưới thì bít thứ 2 (từ phải sang) của X bằng 1.
  • Nếu ô (u, v) có nối sang trái thì bít thứ 3 (từ phải sang) của X bằng 1.

Chấm điểm

Bài toán có 50 test, mỗi test tối đa 2 điểm. Điểm của mỗi test được làm tròn đến 6 chữ số sau dấu phẩy, điểm của cả bài là tổng điểm của các test sau đó làm tròn đến 2 chữ số sau dấu phẩy.

Nếu có bất kì một sự không hợp lệ nào trong output (đường đi cắt nhau, hai ô kề nhau không khớp nhau, ô biên nối ra ngoài, có các cạnh nối nhưng không dùng để nối hai điểm…) bạn sẽ nhận 0 điểm. Nếu coi 

  • M là số lượng màu khác nhau
  • X là số lượng màu bạn nối được
  • N^2 là số lượng ô tối đa có thể phủ được.
  • Y là số ô mà bạn phủ được

Điểm của bạn được tính như sau:

  • Nếu M=X và N^2=Y bạn được 2 điểm (dữ liệu luôn đảm bảo có cách làm như vậy)
  • Nếu không điểm bạn sẽ được tối đa 1.5 điểm. Điểm của bạn bằng:

Formula

Giới hạn

  • Trong tất cả các test, 2 ≤ N ≤ 50
  • Trong 10% số test đầu tiên, chỉ có một cặp điểm phải nối, N ≤ 50.
  • Trong 20% số test tiếp theo, chỉ có không quá 4 cặp điểm phải nối, N ≤ 50.
  • Trong 30% số test tiếp theo, N ≤ 15.
  • Trong 40% số test cuối cùng, không có thêm bất kì giới hạn nào.

Ví dụ

Input:
4
R...
G.G.
R...
..BB

Dưới đây là 3 output cho ví dụ trên, mỗi output sẽ cho một số điểm nhất định:
Output 1: (1.312500 điểm)
2 10 10 12
2 10 8 5
2 10 10 9
0 0 2 8
VMFLOW
Output 2: (2.000000 điểm)
2 10 10 12
2 10 8 5
4 6 10 9
3 9 2 8
VMFLOW

Output 3: (0.437500 điểm)
2 12 0 0
0 5 0 0
2 9 0 0
0 0 2 8
VMFLOW


Được gửi lên bởi:VOJ Team
Ngày:2013-06-26
Thời gian chạy:1s
Giới hạn mã nguồn:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Ngôn ngữ cho phép:C C++ 4.3.2 CPP JAVA PAS-GPC PAS-FPC TEXT

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.