Google Code Jam 2017 - Good News and Bad News

Xem PDF




Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2300 Thời gian: 1.0s Bộ nhớ: 1G Input: bàn phím Output: màn hình

Bạn muốn \(F\) người bạn của mình chia sẻ tin tức. Bạn biết rõ ai có thể nói chuyện với ai. Có \(P\) quan hệ một chiều, mỗi quan hệ là một cặp có thứ tự \((A_i,B_i)\), nghĩa là người bạn \(A_i\) có thể nói chuyện với người bạn \(B_i\). Điều này không có nghĩa \(B_i\) có thể nói chuyện với \(A_i\), mặc dù một cặp có thứ tự khác có thể cho phép chiều ngược lại.

Với mọi cặp có thứ tự \((A_i,B_i)\) hiện có, bạn muốn \(A_i\) chuyển một tin cho \(B_i\). Mỗi tin được biểu diễn bằng một số nguyên: giá trị tuyệt đối cho biết mức độ của tin, còn dấu cho biết đó là tin tốt hay tin xấu. Số nguyên này không được bằng \(0\) (nếu không thì chẳng có tin gì), và giá trị tuyệt đối không được lớn hơn \(F^2\) (nếu không thì tin quá sức kích động). Các quan hệ khác nhau có thể mang các giá trị khác nhau.

Vì quan tâm đến cảm xúc của bạn bè, với mỗi người, tổng giá trị của tất cả tin do người đó gửi phải bằng tổng giá trị của tất cả tin người đó nhận. Nếu một người không gửi tin nào thì tổng thứ nhất được coi là \(0\); nếu người đó không nhận tin nào thì tổng thứ hai cũng được coi là \(0\).

Hãy tìm một bộ giá trị tin thỏa tất cả các quy tắc trên, hoặc xác định rằng điều đó là không thể.

Dữ liệu vào

Dòng đầu chứa số bộ test \(T\). Mỗi bộ test bắt đầu bằng hai số nguyên \(F\)\(P\): số người bạn và số cặp có thứ tự khác nhau. Tiếp theo là \(P\) dòng; dòng thứ \(i\) chứa hai số nguyên khác nhau \(A_i\)\(B_i\), biểu thị rằng \(A_i\) có thể nói chuyện với \(B_i\). Các người bạn được đánh số từ \(1\) đến \(F\).

Dữ liệu ra

Với mỗi bộ test, in một dòng Case #x: y, trong đó x là số thứ tự bộ test, bắt đầu từ \(1\).

Nếu không có cách gán thỏa mãn, yIMPOSSIBLE. Nếu có, y gồm \(P\) số nguyên khác \(0\), mỗi số thuộc đoạn \([-F^2,F^2]\). Số thứ \(i\) ứng với cặp có thứ tự thứ \(i\) trong dữ liệu vào và là giá trị tin mà người thứ nhất gửi cho người thứ hai. Toàn bộ các giá trị phải thỏa điều kiện cân bằng trong đề bài.

Nếu có nhiều đáp án, có thể in bất kỳ đáp án hợp lệ nào.

Ràng buộc

  • \(1\le T\le100\).
  • \(1\le A_i\le F\)\(1\le B_i\le F\) với mọi \(i\).
  • \(A_i\ne B_i\) với mọi \(i\); một người không tự gửi tin cho chính mình.
  • \((A_i,B_i)\ne(A_j,B_j)\) với mọi \(i\ne j\); không cặp có hướng nào bị lặp trong cùng một bộ test.

Phân nhóm

Test Set 1 (Visible): \(2\le F\le4\)\(1\le P\le12\).

Test Set 2 (Hidden): \(2\le F\le1000\)\(1\le P\le2000\).

Điểm các phân nhóm

Mỗi Test Set tương ứng với một subtask trên LQDOJ. Bảng dưới đây giữ nguyên điểm chính thức của Google Code Jam và quy đổi tỷ lệ trên tổng điểm của bài.

Phân nhóm Điểm Google Code Jam Tỷ lệ điểm của bài
Test Set 1 7/26 26,92%
Test Set 2 19/26 73,08%

Ví dụ

Ví dụ 1

Input
5
2 2
1 2
2 1
2 1
1 2
4 3
1 2
2 3
3 1
3 4
1 2
2 3
3 1
2 1
3 3
1 3
2 3
1 2
Output
Case #1: 1 1
Case #2: IMPOSSIBLE
Case #3: -1 -1 -1
Case #4: 4 -4 -4 8
Case #5: -1 1 1
Giải thích

Dữ liệu ra mẫu chỉ trình bày một bộ đáp án hợp lệ; còn có thể có những đáp án hợp lệ khác.

Trong test mẫu 1, một cách hợp lệ là để người 1 gửi tin giá trị \(1\) cho người 2 và người 2 cũng gửi giá trị \(1\) theo chiều ngược lại.

Trong test mẫu 2, giá trị tin người 1 gửi cho người 2 bắt buộc khác \(0\), nên tổng tin người 2 nhận khác \(0\). Nhưng người 2 không thể gửi tin nào, vì thế tổng tin người 2 gửi bằng \(0\). Hai tổng của người 2 không thể bằng nhau, nên đáp án là IMPOSSIBLE.

Trong test mẫu 3, mỗi người 1, 2 và 3 có thể gửi tin giá trị \(-1\) cho người duy nhất mà họ có thể nói chuyện — một vòng tròn tin xấu đáng tiếc. Người 4 không gửi cũng không nhận tin nào, nhưng vẫn thỏa quy tắc.

Trong test mẫu 4, -5 5 5 -10 không phải đáp án hợp lệ: có \(3\) người bạn nhưng \(|-10|>3^2\).

Trong test mẫu 5, không thể giải nếu không dùng ít nhất một giá trị âm.

Nguồn

Google Code Jam 2017, Vòng 3, bài Good News and Bad News.

Nguồn chính thức trên Google Coding Competitions Archive, phát hành theo giấy phép Apache-2.0.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: