Score Bài toán

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

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

Score Bài toán

Bài toán

Score là một trò chơi trên một bảng cho hai người di chuyển cùng một mã thông báo từ vị trí này sang vị trí khác trên bảng. Bảng có N vị trí được đánh số từ 1 đến N, và một số mũi tên. Mỗi mũi tên chỉ từ một điểm này đến một điểm khác. Mỗi vị trí đều thuộc về một trong hai người chơi (gọi là người sở hữu). Mỗi vị trí còn một giá trị dương. Tất cả các giá trị đều khác nhaụ Vị trí 1 là vị trí bắt đầụ Ban đầu cả hai người chơi đều có số điểm là 0.

Trò chơi được thực hiện như saụ Ta xác định vị trí hiện tại của mã thông báo trước khi thực hiện nước đi từ C. Bắt đầu trò chơi C ở vị trí 1. Một nước đi gồm các thao tác sau: 1. 1. Nếu giá trị của C lớn hơn số điểm hiện tại của người sở hữu C, thì giá trị của C

trở thành số điểm mới của người sử hữu C. Ngược lại, số điểm của người sở hữu C

không đổị Số điểm của người chơi còn lại không thay đổi trong trường hợp nàỵ 2. 2. Sau đó, người sở hữu C chọn một trong số các mũi tên ngoài vị trí của mã thông

báo hiện tại và đích của mũi tên trở thành vị trí mới của mã thông báo hiện tạị Một người chơi có thể thực hiện nhiều nước đi liên tục.

Trò chơi kết thúc khi mã thông báo trở về vị trí bắt đầụ Người chiến thắng là người chơi có số điểm cao hơn khi trò chơi kết thúc.

- - Luôn có thể chọn được một mũi tên ngoài vị trí của mã thông báo hiện tạị - - Mỗi vị trí P đều có thể đến được từ vị trí bắt đầu nghĩa là có một chuỗi các

mũi tên từ điểm bắt đầu đến P.

- - Trò chơi chắc chắn kết thúc sau một số hữu hạn nước đị

Hãy viết chương trình chơi trò chơi và chiến thắng. Tất cả các trò chơi được dùng để đánh giá đều có thể thắng tuỳ vào việc bạn thực hiện nước đi trước hay saụ Đối thủ của bạn luôn chơi một cách tối ưu nghĩa là kho có cơ hội anh ta sẽ chiến thắng và chương trình của bạn thuạ

Input và Output

Chương trình c a b n là ng i ch i th nh t và ủ ạ ờ ơ ứ ấ đố ủi th là người ch i th haị Khi chơ ứ ương trình c a b n b t ủ ạ ắ đầu ch y, nó s ạ ẽ đọ ữ ệc d li u vào t input g m: dòng th nh t ch a 1 sừ ồ ứ ấ ứ ố

nguyên ch s v trí ỉ ố ị N, 1<=N<=1000. N dòng ti p theo m i dòng ch a ế ỗ ứ N s nguyên ch aố ứ

thông tin v các m i tên. N u có m t m i tên ch t v trí ề ũ ế ộ ũ ỉ ừ ị i đế ịn v trí j, thì s th ố ứj trên

dòng th ứi trong s N dòng là 1, n u không nó s là 0.ế ẽ

Dòng ti p theo ch a ế ứ N s nguyên ch ngố ỉ ườ ở ữi s h u các v trí. N u v trí ị ế ị i thu c v ngộ ề ười ch i 1 (b n), thì s nguyên th ơ ạ ố ứi là 1, n u không nó s là 2.ế ẽ

Dòng ti p theo ch a ế ứ N s nguyên ch giá tr các v trí. N u s nguyên th ố ỉ ị ị ế ố ứi là j, thì giá tr

c a v trí ủ ị i là j. j luôn tho mãn 1ả <=j<=N và t t c các giá tr ấ ả ị đều khác nhaụ

Sau đó, trò chơi bắt đầu với vị trí mã thông báo hiện tại là 1. Chương trình chơi như sau

và s thoát ra khi mã thông báo tr l i ví trí 1:ẽ ở ạ

• • N u n l t ch ng trình c a b n th c hi n n c i, thì nó s vi t s v trí ti pế đế ượ ươ ủ ạ ự ệ ướ đ ẽ ế ố ị ế

theo P, 1<= P<=N, vào output

• • N u n l t i th c a ch ng trình c a b n th c hi n n c i, thì ch ng trìnhế đế ượ đố ủ ủ ươ ủ ạ ự ệ ướ đ ươ

c s v trí ti p theo P, 1

đọ ố ị ế <=P<=N, t input.

Xét ví dụ dướị Bảng được minh họa trong hình 1. Các vị trí được đánh dấu tròn thuộc về người chơi thứ nhất và các vị trí đánh dấu vuông thuộc về người chơi thứ hai 2. Mỗi vị trí có một giá trị được viết trong dấu tròn hoặc vuông và các vị trí được đánh số bên cạnh các dấu đó. Trò chơi bắt đầụ

Kết thúc trò chơi, người chơi 1 được 3 điểm và người chơi 2 được 2 điểm. Người chơi 1 thắng.

Hướng dẫn lập trình

Trong ví dụ dưới, target là biến nguyên của vị trí.

N u b n l p trình b ng C++ và dùng iostreams, hãy dùng l nh sau ế ạ ậ ằ ệ đểđọc input và vi tế

vào output:

cin>>target;

cout<<target<<endl<<flush;

N u b n l p trình b ng C ho c C++ và dùng scanf và printf, hãy dùng l nh sau ế ạ ậ ằ ặ ệ đểđọc

input và vi t vào output:ế

scanf ("%d", &target);

printf("%d\n",target); fflush (stdout);

Readln(target); Writeln(target);

Công cụ

Cho trước một chương trình (score2 trên Linux, score2.exe trên Windows). Chương trình đọc mô tả trò chơi từ tệp scorẹin theo định dạng như trang trên. Chương trình sẽ viết thông tin này vào output theo đúng định dạng đó. Output có thể được dùng làm input cho chương trình của bạn với mục đích thử nghiệm. Sau đó, chương trình chơi theo cách ngẫu nhiên đọc các nước đi từ input và viết nước đi của nó vào output.

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

Tải bản đầy đủ (DOC)

(187 trang)
w