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

5-2001

Mã hóa kép
BÀI TOÁNAES đ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

(
D
(
c
,
k
),
k
) =
c
.
Trong hàm mã hóa
AES kép
, hai khối chốt khác nhau
k
1

k
2
được dùng liên tục nhau theo thứ tự
k
1
,
k
2
:

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ừ

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
).
C

ph
â
n
('0' '9' 'A' 'F')
N
ế
u
c
ó
nhi

u
gi

i
Page 1
6-2000

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


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


,
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


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 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


4 1 2

1 2 2

2 2 2

3 2 2

4 2 2

Page 2
3
2 3 2

3 3 2

4 3 2

4 2 3

4 2 4

4 2 5

5 2 5

BLOCK.OUT5

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à

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
3,2,1,9,4,5
hoặc theo một trong 14 thứ tự khác.

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
kh

i

đ

u

l
à

chu

i
g

m

32

k
ý

t

theo
h

th



Ví dụ
Thư việnThư 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 );


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ộcSố
s
các chữ số theo hệ thập lục phân 1 <=
s
<=
5.


Nhờ tải bản gốc
Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status