Bài toán: In ấn

Một phần của tài liệu ĐỀ THI OLYMPIC TIN HỌC QUỐC TẾ potx (Trang 46 - 64)

- .LCN với chương trình LOGO, PAS với chương trình PASCAL

Bài toán: In ấn

Máy trạm và máy chủ (Client và Server)

Có hai người sử dụng, mỗi người có một chiếc máy tính. Các máy tính được đăt tên là CLIENT(1) và CLIENT(2). Hai máy tính cùng chia xẻ một hoặc nhiều máy in được đặt tên là SERVER(1), SERVER(2), ... Lệnh in ấn từ hai máy tình được thực hiện lần lượt. Để kết hợp việc truyền tin giữa hai máy tính qua máy in, ta dùng một thiết bị đặc biệt: semaphorẹ

Semaphore

Mỗi máy in có một semaphore đi kèm. Một thiết bị semaphore luôn ở một trong hai trạng thái: S1 hoặc S2. Khi máy in sẵn sàng để nhận dự liệu in ấn, thiết bị semaphore sẽ ở trạng

thái S1. Khi máy in đang bận (thực hiện in ấn tài liệu khác hoặc lỗi) thì thiết bị semaphore ở trạng thái S2.

Thiết bị semaphore có thể thực hiện hai biến đổi từ 'S1->S2' và 'S2->S1'. Khi người dùng ra lệnh in cho máy tính, máy tính sẽ gửi thông điệp "Are_you_open?" đến thiết bị

semaphorẹ Nếu semaphore đang ở trạng thái S1 sau đó chuyển sang trạng thái S2 thì semaphore sẽ gửi thông điệp "Open" trở lại cho máy tính vừa gửi thông điệp

"Are_you_open?" đến nó. Nếu semaphore ở trạng thái S2 thì nó sẽ gửi thông điệp "Closed" lại cho máy tính. Sau khi in xong, máy in sẽ gửi thông điệp "Ready" lại cho semaphorẹ Khi nhận được thông điệp "Ready" từ máy in, semaphore sẽ chuyển về trạng thái S1.

Thiết bị SEMAPHORE

Trong Documentation 1 bạn sẽ thấy những mô tả về thiết bị SEMAPHORẸ Đặc điểm chủ yếu của thiết bị semaphore gồm các định danh, các trạng thái của thiết bị, 'Priority List' (Danh sách ưu tiên), 'Communication Diagram' (Sơ đồ truyền tin), 'State Transition Diagram' (Sơ đồ chuyển trạng thái thiết bị) và 'Receive Procedures' (Thủ tục nhận tin). 'Receive Procedures' mô tả quy trình semaphore trả lời thông tin từ máy in.

'Priority List' cũng rất quan trọng vì có nhiều thông tin được gửi đến cùng một lúc những thiết bị semaphore lại chỉ có thể xử lý lần lượt các tin. 'Priority List' trong Documentation 1 cho rằng một thông tin từ SERVER được ưu tiên hơn một thông tin từ CLIENT và thông tin từ SERVER(2) được ưu tiên hơn thông tin từ SERVER(3).

Máy trạm

Trong Documentation 2 bạn sẽ có các mô tả về máy trạm. Một máy trạm luôn ở một trong ba trạng thái: SA, SB hoặc SC. Một máy trạm ở trạng thái SA khi nó không gửi một lệnh in đến máy chủ và máy chủ cũng đang không thực hiện lệnh in từ máy trạm này gửi đến mà có thể từ máy trạm khác. Máy trạm ở trạng thái SB khi nó muốn kết nối vào một máy chủ. Máy trạm chỉ có thể kết nối vào máy chủ qua thiết bị semaphorẹ Máy trạm ở trạng thái SC khi máy chủ đang thực hiện lệnh in gửi từ chính máy trạm này đến.

Một máy trạm có thể thực hiện lần chuyển trạng thái: 'SA->SB', 'SB->SC', 'SC->SÁ. Khi một máy trạm ở trạng thái SB, máy trạm này có thể nhận thông điệp "Closed" từ

semaphorẹ Sau khi nhận thông điệp này, máy trạm sẽ đợi một thời gian được gọi là 'Waiting_Period' (Thời gian đợi), sau đó máy trạm lại gửi thông điệp "Are_you_open?" tới semaphorẹ Khi semaphore gửi thông điệp "Open" tới máy trạm, thì máy trạm này sẽ chuyển sang trạng thái SC và gửi lệnh in cùng thông điệp "S_Job" tới máy chủ mà semaphore vừa gửi thông điệp được gắn vàọ Sau đó máy chủ này sẽ thực hiện lệnh in. Sau khi in xong, máy chủ sẽ gửi cùng một lúc hai thông điệp: "Ready" tới semaphore và thông điệp "C_Ready" tới máy trạm. Khi nhận thông điệp, máy trạm sẽ chuyển sang trạng thái SẠ Bạn có thể giả định những chiếc máy in là ổn định. Chúng sẽ hoàn thành được các lệnh in gửi đến. Ví dụ, các máy in không bao giờ báo 'out of paper - Hết giấy in'.

Truyền tin

Trong Documentation 3 bạn sẽ thấy trong 'Communication Structure Diagram' (Sơ đồ cấu trúc truyền tin) có tất cả các kiểu thông điệp sẽ được gửi đến lẫn nhau giữa các thiết bị trong sơ đồ cấu trúc truyền tin. Trong 'Message List' (Danh sách thông điệp) bạn sẽ thấy mô tả cụ thể các dạng thông điệp. Mỗi thông điệp có một tên, một người gửi, một người nhận và đôi khi có cả nội dung.

Khi máy gửi gửi một thông điệp với tên A tại thời điểm t, tại thời điểm t + 1 máy nhận sẽ nhận thông điệp bằng thủ tục 'Receive Proceduré Ạ

Nếu nhiều máy cùng gửi các thông điệp đến một máy nhận trong cùng thời gian t, thì tại thời điểm t + 1 máy nhận sẽ nhận tất cả các thông điệp theo thứ tự các máy gửi trong danh sách ưu tiên 'Priority List' của máy nhận.

Yêu cầu A

Một mạng nội bộ (LAN) gồm các đối tượng sau tại thời gian 0:

Đối tượng: CLIENT(1), Client.State = SA, Waiting_Period = 2, Number_of_Servers= 1 Đối tượng: CLIENT(2), Client.State = SA, Waiting_Period = 1, Number_of_Servers= 1 Đối tượng: SERVER(1)

Đối tượng: SEMAPHORE(1), SemaphorẹState = S1

Trong mạng nội bộ này, các dạng thông điệp sau sẽ được gửi đi lại giữa các máy: Tại thời gian 1:

CLIENT(1) gửi thông điệp mang tên "Are_you_open?" Tại thời gian 2:

CLIENT(2) gửi thông điệp mang tên "Are_you_open?" Tại thời gian 4:

SERVER(1) gửi thông điệp mang tên "Ready" Tại thời gian 5:

CLIENT(1) gửi thông điệp mang tên "Are_you_open?"

Documentation 4 minh họa trạng thái các thiết bị SEMAPHORE(1), CLIENT(1) và CLIENT(2) trong một bảng thời gian đến thời gian 6 đơn vị, các thông điệp được nhận, các thông điệp được gửi đi, các trạng thái hiện tại và trạng thái mớị

Câu hỏi Ạ1

Điều gì sẽ xảy ra nếu CLIENT(1) nhận được thông điệp "C_Job" tại thời gian 4? Viết câu trả lời trong Documentation 5. (adsbygoogle = window.adsbygoogle || []).push({});

Điều gì sẽ xảy ra nếu CLIENT(2) nhận được thông điệp "C_Job" tại thời gian 4? Viết câu trả lời trong Documentation 5.

Câu hỏi Ạ3

Hoàn chỉnh bảng trong Documentation 4 với thời gian lên đến 13 nếu các hiện tượng sau xảy ra:

Tại thời gian 8:

SERVER(1) gửi thông điệp mang tên "Ready". Tại thời gian l0:

CLIENT(1) gửi thông điệp mang tên "C_Job". Tại thời gian 12:

SERVER(1) gửi thông điệp mang tên "Ready".

Yêu cầu B

Mạng nội bộ được mở rộng. Giờ đây nó bao gồm hai cặp semaphore-máy chủ:

(SEMAPHORE(1), SEMAPHORE(2), SERVER (1), SERVER(2)). Với mỗi máy trạm số máy chủ có thể kết nối (Number_of_Servers) là 2.

Để có thể sử dụng được cả hai máy in, định nghĩa máy trạm sẽ được thay đổi và được thể hiện trong Documentation 2.

Trong Documentation 6 bạn sẽ thấy thông điệp mới sau khi được thay đổi ở 'Receive Procedures' là: C_Job and Wait.

Trong Documentation 6 bạn cũng thấy những mô tả trạng thái ở thời gian 0. Tại các thời gian dưới đây, các thông điệp sẽ được nhận:

Tại thời gian 0:

CLIENT(1) nhận thông điệp "C_Job" của một người dùng. Tại thời gian 0:

CLIENT(2) nhận thông điệp "C_Job" của một người dùng. Tại thời gian 4:

SEMAPHORE(1) nhận thông điệp "Ready".

Điều gì sẽ xảy ra ở mạng nội bộ mở rộng khi thay đổi các kiểu CLIENT? Đánh dấu các câu trả lời đúng trong Documentation 6.

Yêu cầu C

Các thay đổi kiểu CLIENT trong yêu cầu B sẽ không ảnh hưởng đến một mạng nội bộ mở rộng có nhiều cặp semaphore-máy chủ.

Yêu cầu C.1

Thay đổi định nghĩa kiểu CLIENT (xem trong Documentation 2) thì mạng nội bộ với nhiều cặp semaphore-máy chủ sẽ hoạt động như sau:

một lệnh in từ CLIENT(i) được các máy chủ thực hiện trong một thời gian. Mỗi lệnh in từ một máy trạm chỉ được thực hiện một lần.

Một máy trạm CLIENT(i) gửi thông điệp "Are_you_open?" liên tục đến nhiều semaphore cho đến khi nhận được thông điệp "Closed" hoặc đến khi máy trạm CLIENT(i) nhận được thông điệp "Open".

Khi máy trạm CLIENT(i) nhận được thông điệp, CLIENT(i) sẽ đợi trong khoảng thời gian Waiting_Period sau đó lại tiếp tục gửi các thông điệp "Are_you_open?".

Viết câu trả lời trong Documentation 7.

Yêu cầu C.2

Thay đổi kiểu máy trạm theo cách máy trạm CLIENT(i) có thể gửi nhiều lệnh in đến nhiều máy chủ cùng một lúc. Tuy nhiên số lệnh in từ mỗi CLIENT(i) nên giới hạn ở CLIENT(i).Job_Maximum.

Viết câu trả lời trong Documentation 8.

Documentation 1 (adsbygoogle = window.adsbygoogle || []).push({});

SEMAPHORE

Tên thiết bị: (SEMAPHORE(1),SEMAPHORE(2),SEMAPHORE(3),...) Trạng thái: (S1,S2); trạng thái ban đầu là S1.

Priority List (Danh sách ưu tiên): SERVER(1),SERVER(2),...,CLIENT(1),CLIENT(2),... Communication Diagram (Sơ đồ truyền tin)

Receive Procedures (Thủ tục nhận tin) procedure Are_you_open?(Client,Semaphore) begin if State = S1 then State <- S2 Send("Open(Semaphore,Client)") else if State = S2 then Send("Closed(Semaphore,Client)") end

procedure Ready(Server, Semaphore) begin State <- S1 end Documentation 2 CLIENT (Máy trạm) Tên: (CLIENT(1),CLIENT(2),CLIENT(3),...) Trạng thái: (SA,SB,SC), trạng thái ban đầu là SẠ Priority List (Danh sách ưu tiên):

CLIENT,SERVER(1),SERVER(2),...,SEMAPHORE(1), SEMAPHORE(2),...,USER(1),USER(2),...

Countdown (Số đếm) t | t thuộc N }; giá trị ban đầu là 0. Waiting_Period (Thời gian đợi): { t | t thuộc N và t > 0 }

Semaphore_Index (Chỉ số Semaphore): { i | i = 1,2,...,Number_of_Servers } Number-of-Servers (Số máy chủ): { i | i thuộc N và i > 0 }

Receive Procedures (Thủ tục nhận tin) procedure C_Job(User,Client,Document) begin if State = SA then State <- SB Send("Are_you_open?(Client, SEMAPHORE(Semaphore_Index))") else if State = SB then Send("Try_later(Client,User, Client_is_busy)") else if State = SC then Send("Try_later(Client,User, All_Servers_are_busy)") end procedure Open(Semaphore,Client) begin if State = SB then State <- SC Send("S_Job(Client,Server, Document)") end procedure Closed(Semaphore,Client) begin

Countdown <- Waiting_Period Send("Wait(Client,Client)") end procedure Wait(Client,Client) begin Countdown <- Countdown - 1 if Countdown > 0 then Send("Wait(Client,Client)") else Send("Are_you_open?(Client, SEMAPHORE(Semaphore_Index))") end procedure C_Ready(Server,Client) begin State <- SA end Documentation 3

Message List (Danh sách thông điệp) (i,j,k thuộc N)

identifier sender receiver content

__ (Tên)__________(máy gửi)_______(máy nhận)______(Nội dung)_ Are_you_open? CLIENT(i) SEMAPHORE(j) -

C_Job USER(i) CLIENT(j) DOCUMENT(k) C_Ready SERVER(i) CLIENT(j) -

Closed SEMAPHORE(i) CLIENT(j) - Open SEMAPHORE(i) CLIENT(j) - Ready SERVER(i) SEMAPHORE(j) -

S_Job CLIENT(i) SERVER(j) DOCUMENT(k) Try_later CLIENT(i) USER(j) EXPLANATION Wait CLIENT(i) CLIENT(i) -

Documentation 4

Trả lời yêu cầu Ạ3

Chú ý: Bảng này nên được in theo khổ giấy dọc.

SEMAPHORE(1) CLIENT(1) CLIENT(2) ___________________________________

__________________________________________ __________________________________________

|received |State/ | sent | |received| State/ |Count-| sent | |received| State/ | Count-| sent |

|messages |Transition|messages| |messages|Transition| down | messages | | messages|Transition| down | messages |

|_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| time ___________________________________ __________________________________________ __________________________________________ 0 | |S1 | | | |SA |0 | | | |SA |0 | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________|

1 | |S1 | | |C_Job |SA->SB |0 |Are_you_open?| | |SA | 0 | |

|_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________|

2 |Are_you_open?|S1->S2 |Open | | |SB |0 | | |C_Job |SA- >SB |0 |Are_you_open?|

|_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________|

3 |Are_you_open?|S2 |Closed | |Open |SB->SC |0 |S_Job | | | SB |0 | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 4 | |S2 | | | |SC |0 | | |Closed |SB |0->1 | Wait | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________|

5 |Ready |S2->S1 | | |C_Ready |SC->SA |0 | | |Wait |SB | 1->0 |Are_you_open?| (adsbygoogle = window.adsbygoogle || []).push({});

| | | | |C_Job |SA->SB |0 |Are_you_open?| | | | | |

_____________| |________|__________|______|_____________| 6 |Are_you_open?|S1->S2 |Open | | | | | | | | | | | |Are_you_open?|S2 |Closed | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 7 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 8 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 9 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 10 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 11 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 12 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| 13 | | | | | | | | | | | | | | | | | | | | | | | | | | | | |_____________|__________|________| |________|__________|______| _____________| |________|__________|______|_____________| Documentation 5 Câu hỏi Ạ1

Điều gì xảy ra nếu CLIENT(1) nhận được thông điệp "C_Job" tại thời gian 4 ? ______________________________________________________

______________________________________________________ ______________________________________________________

______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ Câu hỏi Ạ2

Điều gì xảy ra nếu CLIENT(2) nhận được thông điệp "C_Job" tại thời gian 4 ? ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ Documentation 6 Yêu cầu B

'Receive Procedures' (Thủ tục nhận) sau khi thay đổi: C_Job and Wait. Chú ý: Phần lập trình sự thay đổi được thể hiện bằng chữ nghiêng.

procedure C_Job(User,Client) begin

if State = SA then State <- SB

for Semaphore_Index <- 1 step 1 until Number_of_Servers

Send("Are_you_open?(Client,SEMAPHORE(Semaphore_Index))") else if State = SB then Send("Try_later(Client,User,Client_is_busy)") else if State = SC then Send(,Try_later(Client,User,All_Servers_are_busy)') end procedure Wait(Client,Client) begin if State = SB

then Countdown <- Countdown -1 if Countdown > 0 then Send("Wait(Client,Client)") else if Countdown < 0 then Countdown <- 0

else for Semaphore_Index <- 1 step 1 until Number_of_Servers

Send("Are_you_open?(Client,SEMAPHORE(Semaphore_Index))") end

Tại thời gian 0 trạng thái của mạng nội bộ như sau:

Đối tượng: CLIENT(1), Client.State SA, Waiting_Period = 2, Number_of_Servers=2 Đối tượng: CLIENT(2), Client.State SA, Waiting_Period = 1, Number_of_Servers=2 Đối tượng: SEMAPHORE(1), SemaphorẹState = S1

Đối tượng: SEMAPHORE(2), SemaphorẹState = S1 Trong thời gian tiếp theo các thông điệp sau được nhận:

Tại thời gian 0: CLIENT(1) nhận được thông điệp "C_Job" của người dùng. Tại thời gian 0: CLIENT(2) nhận được thông điệp "C_Job" của người dùng. Tại thời gian 4: SEMAPHORE(1) nhận được thông điệp "Ready".

Điều gì xảy ra với mạng nội bộ mở rộng khi có những thay đổi kiểu máy trạm CLIENT? Đánh dấu câu trở lời đúng.

(a)

Lệnh in từ CLIENT(1) sẽ được thực hiện ở SERVER(1) và SERVER(2). Lệnh in từ CLIENT(2) không được thực hiện.

(b)

Lệnh in từ CLIENT(1) sẽ được thực hiện một lần ở SERVER(1). Lệnh in từ CLIENT(2) sẽ được thực hiện một lần ở SERVER(2). (c)

Lệnh in từ CLIENT(1) sẽ được thực hiện một lần ở SERVER(1). Lệnh in từ CLIENT(2) sẽ được thực hiện một lần ở SERVER(1). (d)

Lệnh in từ CLIENT(1) sẽ được thực hiện một lần ở SERVER(2). Lệnh in từ CLIENT(2) sẽ được thực hiện một lần ở SERVER(2). (e)

Lệnh in từ CLIENT(1) không được thực hiện.

Lệnh in từ CLIENT(2) sẽ được thực hiện ở SERVER(1) và SERVER(2).

Documentation 7

Yêu cầu C.1

______________________________________________________ ______________________________________________________ (adsbygoogle = window.adsbygoogle || []).push({});

______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ Documentation 8 Yêu cầu C.2 ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ ______________________________________________________ Trò chơi chữ

Hình 1: Mỗi ký tự trong số 26 chữ cái thường và giá trị của nó

Các trò chơi chữ rất phổ biến trong gia đình và trên truyền hình. Một trong các trò chơi đó là, mỗi ký tự có một giá trị, bạn hãy chọn các ký tự để tạo thành một hoặc nhiều từ với số điểm là tổng giá trị của các ký tự là lớn nhất. Hoặc bạn có thể thử xét tất cả các từ bạn biết sau đó đếm số điểm.

Cho trước các giá trị như trong hình 1, cho trước một tập hợp các từ trong tiếng Anh và cho trước các từ được dùng đến; hãy tìm các từ hoặc cặp từ cho số điểm cao nhất.

Input

File INPUT.TXT chỉ có một dòng chứa chuỗi ký tự viết thường (từ 'a' đến 'z') được chọn. Chuỗi ký tự gồm từ 3 đến 7 kí tự được xếp tuỳ ý.

File từ điển WORDS.TXT có thể chứa tối đa 40.000 dòng. Dòng cuối cùng của file chứa dấu chấm (.). Mỗi dòng trong số các dòng ở giữa chứa từ 3 đến 7 ký tự viết thường. File

WORDS.TXT được xếp theo thứ tự bảng chữ cái và không có dòng giống nhaụ

Output

Trên dòng đầu tiên của file OUTPUT.TXT, chương trình phải báo cáo số điểm cao nhất có thể đạt được (yêu cầu A), và trên mỗi dòng tiếp theo chứa từ hoặc cặp từ trong file

WORDS.TXT tương ứng với số điểm đó (yêu cầu B). Số lần một ký tự xuất hiện trong dữ

liệu ra không nhiều hơn số lần xuất hiện trong dòng dữ liệu vàọ Giá trị của các ký tự được cho trong hình 1.

Khi có một từ ghép được tạo ra từ các ký tự trên thì hãy in từ đó ra trên cùng dòng ngăn cách với các từ trước bằng ký tự trống. Không chấp nhận các cặp từ giống nhau như 'rag prom' và 'prom rag'.

Ví dụ

Input và Output

File input và output tương ứng.

Cuộc đua trên phố (Bài toán Race)

Hình 1 mô tả một cuộc đua trên phố. Có một số điểm được đánh số từ 0 đến N (trong ví dụ này N=9) và một số mũi tên nối các điểm. Điểm 0 là điểm bắt đầu cuộc đua; điểm N là điểm kết thúc. Các mũi tên chỉ đường một chiềụ Các tay đua đi di chuyển từ điểm này đến điểm tiếp theo qua các con đường một chiều theo hướng mũi tên. Tại môi số điểm, các tay đua có thể tự chọn hướng đi theo mũi tên.

Một cuộc đua các các đặc điểm sau:

1. Từ điểm xuất phát có thể đi đến tất cả các điểm còn lạị 2. Có thể đi từ nhiều điểm đến điểm kết thúc cuộc đuạ

3. Điểm kết thúc là điểm cuối cùng (không còn mũi tên chỉ đường nào từ đây). Các tay đua không bắt buộc phải đến tất cả các điểm trước khi về đích. Tuy nhiên có một số điểm không thể tránh khỏi như các điểm 0, 3, 6 và 9 trong ví dụ trên. Cho trước một cuộc đua, hãy viết chương trình xác định các điểm không thể tránh được mà tất cả các tay đua phải đi qua trừ điểm xuất phát và điểm đích (Yêu cầu A).

Giả sử cuộc đua được tổ chức trong hai ngày liên tiếp, do đó cuộc đua được chia thành hai cuộc đua nhỏ trong mỗi ngàỵ Ngày đầu tiên, điểm xuất phát là điểm 0 và điểm kết thúc là một điểm nào đó được cắt. Trong ngày thứ hai, điểm xuất phát là điểm kết thúc của ngày thứ nhất và điểm đích là điểm N. Cho trước một cuộc đua, hãy viết chương trình xác định các điểm cắt (Yêu cầu B). Điểm S là điểm cắt giữa cuộc đua C nếu S không trùng với điểm xuất phát hay điểm đích của C và cuộc đua có thể được chia thành hai cuộc đua nhỏ không có mũi tên chỉ hướng chung. Trong ví dụ trên chỉ có điểm 3 mới có

Một phần của tài liệu ĐỀ THI OLYMPIC TIN HỌC QUỐC TẾ potx (Trang 46 - 64)