1. Trang chủ
  2. » Khoa Học Tự Nhiên

Tài liệu Đề thi toán quốc tế tháng 5-6 2001 ppt

8 311 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tài liệu đề thi toán quốc tế tháng 5-6 2001 ppt
Năm xuất bản 2001
Định dạng
Số trang 8
Dung lượng 1,16 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Dòng thứ nhất chứa #FILE double I trong đó I là số thứ tự tệp input... Một vật thể rắn ba chiều gọi tắt là vật rắn là một nhóm các hình lập phương đơn vị liên thông không rỗng như trong

Trang 1

Mã hóa kép

BÀI TOÁN

AES đang nghiên cứu một thuật toán mã hóa rất mạnh Thuật toán làm việc với 3 khối, mỗi khối gồm 128 bit Cho trước khối văn bản p và một khối chốt k, hàm mã hóa AES E sẽ khôi phục lại khối đã được mã hóa c:

c = E(p, k)

Nghịch đảo của hàm mã hóa E là hàm giải mã D như sau:

D ( E(p, k), k ) = p , E ( D(c, k), k ) = c

Trong hàm mã hóa AES kép, hai khối chốt khác nhau k 1 và k 2 được dùng liên tục nhau theo thứ tự

k 1 , k 2:

c 2 = E ( E(p, k 1 ), k 2 )

Trong bài toán này, cho trước cả số nguyên s Chỉ xét 4*s bit ở tận cùng bên trái của một trong số chuỗi, còn lại các bít khác (128 bit tận cùng bên phải trừ đi các bit 4*s) đều là 0

Hãy khôi phục cặp khối chốt của một số đoạn văn bản được AES mã hóa hai lần Cho trước đoạn

văn bản chưa mã hóa p và đoạn văn bản đã mã hóa hai lần tương ứng c 2, và cấu trúc của khối mã

hóa được biểu diễn bằng s

Thuật toán mã hóa và giải mã AES có sẵn trong thư viện

Bạn phải đưa ra khối khôi phục thay vì chương trình khôi phục

INPUT

Cho trướs 10 bộ dữ liệu trong các tệp văn bản có tên từ double1.in đến double10.in

Một tệp input chứa 3 dòng Dòng đầu tiên chứa số nguyên s, dòng thứ hai chứa văn bản chưa mã hóa p, dòng dòng thứ ba chứa văn bản đã mã hóa hai lần c 2 từ p bằng thuật toán AES kép Cả hai

khối đều là các chuỗi gồm 32 ký tự theo hệ thập luc phân ('0' '9', 'A' 'F')

OUTPUT

Hãy đưa ra 10 tệp output tương ứng với 10 tệp input Mỗi tệp output cũng gồm 3 dòng Dòng thứ nhất chứa #FILE double I trong đó I là số thứ tự tệp input Dòng thứ hai chứa khối chốt

k 1 , và dòng thứ ba chứa khối chốt k 2, sao cho

c 2 = E ( E(p, k 1 ), k 2 )

Trang 2

6 Building with Blocks

Bài toán

Hình lập phương đơn vị là hình có kích thước 1x1x1 với các góc có tọa độ nguyên x, y và z Hai

hình lập phương đơn vị liên thông với nhau khi chúng có chung 1 mặt Một vật thể rắn ba chiều (gọi tắt là vật rắn) là một nhóm các hình lập phương đơn vị liên thông không rỗng như trong hình

1 Thể tích của vật rắn là số hình lập phương đơn vị nằm trong vật rắn Một khối là một vật rắn có thể tích lớn nhất là 4 Hai khối có được gọi là đồng dạng nếu quay hoặc tịnh tiến một khối sẽ được khối còn lại Có tất cả 12 kiểu khối (xem hình 2) Màu sắc trong hình 2 chỉ giúp phân loại cấu trúc vật rắn

Một bộ D các khối là thành phần của vật rắn S khi kết hợp tất cả các khối trong D sẽ được S, và hai khối khác nhau trong D không có chung một hình lập phương đơn vị

Hãy viết chương trình từ một mô tả các kiểu khối và vật rắn S, xác định bộ khối nhỏ nhất có thể cấu thành S Chỉ cần báo cáo kiểu của các khối trong cấu thành

Input

Trong input, hình lập phương đơn vị được mô tả bằng một dòng với ba số nguyên x, y và z, là cặp tọa độ của góc với x + y + z nhỏ nhất

Tệp input mô tả kiểu khối có tên là TYPES.IN gồm phần mô tả 12 kiểu khối trong hình 2 sắp xếp theo tên kiểu Mỗi kiểu khối được mô tả bằng một nhóm dòng liên tục Dòng đầu tiên chứa số

nguyên I chỉ kiểu khối (1 <= I <= 12) Dòng thứ hai chứa thể tích V của kiểu khối đó (1 <= V <= 4) V dòng còn lại, mỗi dòng chứa ba số nguyên x, y và z, mỗi số nguyên là số hình lập phương đơn vị trong kiểu khối (1 <= x, y, z <= 4)

Tệp input mô tả vật rắn có tên là BLOCK.IN Dòng đầu tiên chứa thể tích V của vật rắn (1 <= V

<= 50) V dòng còn lại mỗi dòng chứa ba số nguyên x, y, z, mỗi số là số hình lập phương đơn vị cấu thành vật rắn (1 <= x, y, z <= 7)

Output

Tệp output có tên BLOCK.OUT Dòng đầu tiên chứa một số nguyên M là số khối ít nhất cấu thành vật rắn Dòng thứ hai liệt kê M tên kiểu khối cấu thành vật rắn Với mỗi tệp input có thể có

nhiều giải pháp, chương trình của bạn chỉ cần báo cáo một giải pháp

Ví dụ

Input và Output

TYPES.IN

1

1

1 1 1

2

2

1 1 1

1 2 1

3

3

Trang 3

1 1 1

1 2 1

1 3 1

4

3

1 1 1

1 2 1

1 1 2

5

4

1 1 1

1 2 1

1 3 1

1 4 1

6

4

1 1 1

1 2 1

1 1 2

1 2 2

7

4

1 1 1

1 2 1

1 1 2

1 1 3

8

4

1 1 1

1 2 1

1 3 1

1 2 2

9

4

1 2 1

1 3 1

1 1 2

1 2 2

10

4

2 1 1

1 2 1

2 2 1

2 1 2

11

4

1 1 1

1 2 1

2 2 1

1 1 2

12

4

2 2 1

2 1 2

1 2 2

2 2 2

BLOCK.IN

18

2 1 1

4 1 1

2 3 1

4 3 1

2 1 2

3 1 2

4 1 2

1 2 2

2 2 2

3 2 2

Trang 4

2 3 2

3 3 2

4 3 2

4 2 3

4 2 4

4 2 5

5 2 5

5

7 10 2 10 12

Chú ý:

1 Tệp input có tên BLOCK.IN mô tả vật rắn có tên ‘con ngựa’ trong hình 1

2 Các giải pháp khác cho dòng thứ hai của output mô tả các kiểu khối được sử dụng, như sau:

2 7 10 11 12

2 7 11 11 12

4 4 7 10 11

4 4 9 10 11

Trang 5

3

Trang 6

Kho hàng

Bài toán

Một công ty công nghệ cao có một kho hàng lớn hình chữ nhật Kho hàng có một người quản lý

và một công nhân vận hành Các cạnh của kho hàng theo thứ tự được gọi là cạnh trái, trên, phải

và dưới Diện tích kho hàng được chia thành các ô vuông bằng nhau theo các hàng và các cột Các hàng được đánh số từ đỉnh bằng các số nguyên 1,2, , và các cột được đánh số bắt đầu từ bên trái bắt đầu từ 1,2,

Kho hàng có các container dùng để chứa các thiết bị kỹ thuật có giá trị không cao Mỗi container cũng được đánh số khác nhau Mỗi container nằm gọn trong một ô vuông sàn kho Kho hàng đủ lớn để số container được đưa đến luôn nhỏ hơn số ô vuông sàn kho Các container không được đưa ra khỏi kho hàng mà chỉ có các container mới được đưa đến Cửa vào kho hàng ở góc trên bên trái

Người công nhân xếp các container quanh cửa kho sao cho anh ta có thể tìm chúng theo số đánh Anh ta dùng cách sau

Giả sử, container tiếp theo được đưa vào có số hiệu là k Người công nhân đi dọc theo hàng thứ nhất từ bên trái để tìm container có số nhỏ hơn k Nếu không tìm thấy container đó, thì container k

sẽ được xếp ngay vào sau container cuối cùng trong hàng thứ nhất Nếu tìm thấy container l nhỏ hơn k thì l sẽ được thay bằng k và l được đưa vào hàng tiếp theo Nếu người công nhân đi đến hàng không chứa container nào, thì k sẽ được đưa vào vị trí đầu tiên bên trái của hàng đó

Giả sử các container 3,4,9,2,5,1 được đưa đến kho theo thứ tự này thì chúng sẽ được xếp như sau

1 4 5

2 9

3

Người quản lý đến chỗ người công nhân và nói với anh ta như sau:

Người quản lý: Container 5 có đến trước container 4 không?

Người công nhân: Không thể có điều đó

Người quản lý: Vậy thì thứ tự đưa container đến theo vị trí xếp như thế nào?

Người công nhân: Ví dụ, các container có thể đưa đến kho theo thứ tự 3,2,1,4,9,5 hoặc

Hãy giúp người quản lý viết chương trình từ cách sắp xếp container cho trước, hãy tính các thứ tự đưa container đến kho

INPUT

Trang 7

Tệp input có tên là depot.in Dòng đầu tiên chứa một số nguyên R: chỉ số hàng có container R dòng sau đó chứa thông tin về các hàng 1, ,R bắt đầu từ trên đỉnh Dòng đầu tiên trong số các dòng đó chứa số M chỉ số container trong hàng đó Sau đó đến M số nguyên chỉ số đánh trên container bắt đầu từ bên trái hàng Số đánh trên container I thỏa mãn 1 ≤ I ≤ 50 N là số container trong kho hàng với 1 <= N <= 13

OUTPUT

Tệp output có tên là depot.out Tệp output chứa số dòng tướng ứng với số khả năng đưa hàng

đến kho Mỗi dòng trong số đó chứa N số nguyên chỉ số đánh trên container theo thứ tự đưa đến

kho được mô tả trên dòng đó

Ví dụ

INPUTS và OUTPUTS

Ví dụ 1:

Ví dụ 2:

Trang 8

Cả hai khối đều là chuỗi gồm 32 ký tự theo hệ thập lục phân ( 0 9 , A F ) Nếu có nhiều giải pháp hãy in ra một giải pháp

Ví dụ

Thư viện

Thư viện FreePascal (Linux: aeslibp.p, aeslibp.ppu, aeslibp.o; Windows: aeslibp.p, aeslibp.ppw, aeslibp.ow*):

type

HexStr = String [ 32 ]; { only '0' '9', 'A' 'F' }

Block = array [ 0 15 ] of Byte; { 128 bits }

procedure HexStrToBlock ( const hs: HexStr; var b: Block );

procedure BlockToHexStr ( const b: Block; var hs: HexStr );

procedure Encrypt ( const p, k: Block; var c: Block );

{ c = E(p,k) }

procedure Decrypt ( const c, k: Block; var p: Block );

{ p = D(c,k) }

Cho trước chương trình aestoolp.pas minh họa cách dùng thư viện FreePascal

thư viện GNU C/C++ (Linux và Windows: aeslibc.h, aeslibc.o*):

typedef char HexStr[33]; /* '0' '9', 'A' 'F', '\0'-terminated */

typedef unsigned char Block[16]; /* 128 bits */

void hexstr2block ( const HexStr hs, / * out-param */ Block b );

void block2hexstr ( const Block b, / * out-param */ HexStr hs );

void encrypt ( const Block p, const Block k, / * out-param */ Block c );

/* c = E(p,k) */

void decrypt ( const Block c, const Block k, / * out-param */ Block p );

/* p = D(c,k) */

Chương trình aestoolc.c minh họa cách dùng thư viện GNU C/C++

Ràng buộc

Số s các chữ số theo hệ thập lục phân 1 <= s <= 5

Gợi ý: Một chương tình tốt có thể khôi phục một trong số khối chốt yêu cầu trong chưa đến 10

giây với bất kỳ input nào

Ngày đăng: 26/01/2014, 03:20

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w