trang chủ / bài tập / patmatch

Sắp xếp mẫu

Đề bài

Mô tả

Cho n mẫu p1,p2,,pnm xâu s1,s2,,sm. Mỗi mẫu pi gồm k ký tự, mỗi ký tự là một chữ cái Latin thường hoặc là ký tự đại diện (ký hiệu bằng dấu gạch dưới _). Tất cả các mẫu đôi một phân biệt. Mỗi xâu sj gồm k chữ cái Latin thường.

Một xâu a khớp với một mẫu b nếu với mọi vị trí i từ 1 đến k, hoặc bi là ký tự đại diện, hoặc bi=ai.

Bạn cần sắp xếp lại thứ tự các mẫu sao cho, với mỗi xâu sj, mẫu đầu tiên (theo thứ tự mới) mà sj khớp phải chính là mẫu pmtj. Được phép giữ nguyên thứ tự ban đầu.

Hãy xác định xem có thể sắp xếp lại như vậy hay không. Nếu có, hãy in ra một thứ tự hợp lệ bất kỳ.

Dữ liệu vào

  • Dòng đầu chứa ba số nguyên n, mk.
  • n dòng tiếp theo, mỗi dòng chứa một mẫu gồm k ký tự là chữ cái thường hoặc dấu gạch dưới.
  • m dòng tiếp theo, mỗi dòng chứa một xâu gồm k chữ cái thường, tiếp theo là một số nguyên mt (1mtn), là chỉ số của mẫu mà xâu tương ứng cần khớp đầu tiên.

Dữ liệu ra

  • Nếu không có cách sắp xếp nào thỏa mãn, in ra NO.
  • Ngược lại, in ra YES ở dòng đầu. Dòng thứ hai chứa n số nguyên phân biệt từ 1 đến n là thứ tự các mẫu. Nếu có nhiều đáp án, in ra bất kỳ đáp án nào.

Ràng buộc

  • 1n,m105
  • 1k4
  • Các mẫu đôi một phân biệt.

Ví dụ

Input Output Giải thích
5 3 4
bd
__b_
aaaa
ab__
_bcd
abcd 4
abba 2
dbcd 5
YES
2 3 4 5 1
Với thứ tự b_, aaaa, ab, bcd, bd: xâu abcd khớp ab__, bcd, bd và mẫu đầu tiên là ab tức p4; xâu abba khớp _b, ab__ và mẫu đầu tiên là _b tức p2; xâu dbcd khớp _bcd, bd và mẫu đầu tiên là _bcd tức p5. Đáp án không duy nhất, chấp nhận mọi thứ tự hợp lệ.
2 2 2
a_
_b
ab 1
ab 2
NO Thứ tự (a_, _b) khiến cả hai xâu khớp mẫu 1 đầu tiên, còn thứ tự (b, a) khiến cả hai khớp mẫu 2 đầu tiên. Không có thứ tự nào cho kết quả 1 và 2.
1 1 3
__c
cba 1
NO Xâu cba không khớp mẫu __c (vị trí thứ ba là c nhưng cba có a), nên không tồn tại thứ tự hợp lệ.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0