Add THT/B/QG-2014

This commit is contained in:
Nguyễn Gia Phong 2017-06-13 15:18:37 +07:00
parent 69a50f40be
commit 2b6ce5b49d
13 changed files with 501 additions and 1 deletions

View file

@ -0,0 +1,10 @@
1
35
210
330
1744
210
358
1001
1312
1007

View file

@ -0,0 +1,6 @@
1 2 3 3 3
1 2 4 4 4
1 2 5 5 4
6 7 7 5 8
6 7 5 5 8
6 7 7 8 8

View file

@ -0,0 +1,8 @@
1 2 3 4 5 6 7 8 9 9 10 10
1 2 3 4 5 6 7 8 9 11 10 12
1 2 3 4 5 6 7 8 9 11 10 12
13 13 14 15 15 15 16 16 11 11 12 12
13 17 14 14 14 15 16 18 19 19 19 20
13 17 17 17 21 21 16 18 18 18 19 20
22 23 23 23 21 24 25 25 25 26 20 20
22 22 22 23 21 24 24 24 25 26 26 26

View file

@ -0,0 +1,7 @@
1 2 3 4 5 6 7 8 9 10 11 11 11
1 2 3 4 5 6 7 8 9 10 12 12 11
1 2 3 4 5 6 7 8 9 10 12 13 13
14 14 14 15 15 15 16 16 17 17 12 12 13
14 18 18 18 19 20 20 16 17 21 21 21 13
22 18 22 18 19 20 16 16 17 21 23 21 23
22 22 22 19 19 20 20 24 24 24 23 23 23

View file

@ -0,0 +1,15 @@
1 2 3 4 5 5 6 6 6 7
1 2 3 4 5 8 6 8 6 7
1 2 3 4 5 8 8 8 7 7
9 10 11 12 13 13 14 14 14 15
9 10 11 12 13 16 14 16 14 15
9 10 11 12 13 16 16 16 15 15
17 18 19 20 21 21 22 22 22 23
17 18 19 20 21 24 22 24 22 23
17 18 19 20 21 24 24 24 23 23
25 26 27 28 29 29 30 30 30 31
25 26 27 28 29 32 30 32 30 31
25 26 27 28 29 32 32 32 31 31
33 34 35 36 37 37 38 38 38 39
33 34 35 36 37 40 38 40 38 39
33 34 35 36 37 40 40 40 39 39

View file

@ -0,0 +1,15 @@
1 1 2 2 3 3 21 21 22 22 23 23 41 41 42 42 43 43 61 61 62 62 63 63 81 81 82 82 83 83
1 4 2 5 5 3 21 24 22 25 25 23 41 44 42 45 45 43 61 64 62 65 65 63 81 84 82 85 85 83
1 4 2 2 5 3 21 24 22 22 25 23 41 44 42 42 45 43 61 64 62 62 65 63 81 84 82 82 85 83
4 4 6 7 5 7 24 24 26 27 25 27 44 44 46 47 45 47 64 64 66 67 65 67 84 84 86 87 85 87
8 8 6 7 7 7 28 28 26 27 27 27 48 48 46 47 47 47 68 68 66 67 67 67 88 88 86 87 87 87
8 6 6 9 9 9 28 26 26 29 29 29 48 46 46 49 49 49 68 66 66 69 69 69 88 86 86 89 89 89
8 8 10 10 10 9 28 28 30 30 30 29 48 48 50 50 50 49 68 68 70 70 70 69 88 88 90 90 90 89
11 11 10 12 10 12 31 31 30 32 30 32 51 51 50 52 50 52 71 71 70 72 70 72 91 91 90 92 90 92
11 13 13 12 12 12 31 33 33 32 32 32 51 53 53 52 52 52 71 73 73 72 72 72 91 93 93 92 92 92
11 11 13 14 14 14 31 31 33 34 34 34 51 51 53 54 54 54 71 71 73 74 74 74 91 91 93 94 94 94
15 15 13 16 16 14 35 35 33 36 36 34 55 55 53 56 56 54 75 75 73 76 76 74 95 95 93 96 96 94
15 17 17 16 18 18 35 37 37 36 38 38 55 57 57 56 58 58 75 77 77 76 78 78 95 97 97 96 98 98
15 15 17 16 16 18 35 35 37 36 36 38 55 55 57 56 56 58 75 75 77 76 76 78 95 95 97 96 96 98
19 17 17 20 18 18 39 37 37 40 38 38 59 57 57 60 58 58 79 77 77 80 78 78 99 97 97 100 98 98
19 19 19 20 20 20 39 39 39 40 40 40 59 59 59 60 60 60 79 79 79 80 80 80 99 99 99 100 100 100

7
THT/B/QG-2014/dic.dat Executable file
View file

@ -0,0 +1,7 @@
cat
can
mic
man
tiger
hello
world

96
THT/B/QG-2014/dic.pp Executable file
View file

@ -0,0 +1,96 @@
unit dic;
interface
function count_char(c: char): longint;
function get_char_at_pos(x: longint): char;
procedure answer(s: string);
implementation
var
secret_word: string;
words: array [1..1000000] of string;
total_cost, n: longint;
procedure answer(s: string);
begin
if s = secret_word then
begin
writeln('Chuc mung ban da tim ra dap an chinh xac la "', s, '"');
writeln('Chi phi ban da su dung la ', total_cost);
end
else
begin
writeln('Dap an ban dua ra la "', s, '"');
writeln('Dap an chinh xac la "', secret_word, '"');
end;
halt;
end;
procedure cost_limit_exceed;
begin
writeln('Chi phi ban da su dung vuot qua chi phi toi da cho phep');
halt;
end;
function count_char(c: char): longint;
var
i, res: longint;
begin
total_cost := total_cost + 1;
if (total_cost > 1000) then
cost_limit_exceed;
res := 0;
for i := 1 to length(secret_word) do
if secret_word[i] = c then
inc(res);
exit(res);
end;
function get_char_at_pos(x: longint): char;
begin
total_cost := total_cost + 10;
if (total_cost > 1000) then
cost_limit_exceed;
if (x < 1) or (x > length(secret_word)) then
exit('#');
exit(secret_word[x]);
end;
procedure check_secret_word;
var
f: text;
i: longint;
ok: boolean;
begin
assign(f, 'dic.dat');
reset(f);
while not seekeof(f) do
begin
inc(n);
readln(f, words[n]);
end;
close(f);
ok := false;
for i := 1 to n do
if words[i] = secret_word then ok := true;
if not ok then
begin
writeln('Du lieu duoc khoi tao khong chinh xac. Dap an can tim khong nam trong tu dien');
halt;
end;
end;
procedure init;
begin
writeln;
writeln(' TU DIEN ');
writeln('*****************');
writeln;
secret_word := 'cat';
total_cost := 0;
check_secret_word;
end;
initialization
init;
end.

29
THT/B/QG-2014/giaodiem.c Normal file
View file

@ -0,0 +1,29 @@
#include <stdio.h>
const long long TESTS[] = {4, 7, 10, 11, 7777, 8888888, 1234567890, 9999999999,
12345678912345, 2014201420142014};
int main()
{
char i, j, k, divisor;
long long n, p;
FILE *f = fopen("GIAODIEM.TXT", "w");
for (i = 0; i < 10; i++) {
divisor = 24;
p = 1;
for (j = 0; j < 4; j++) {
n = TESTS[i] - j;
for (k = 2; k < 4; k++) {
while (!(n % k + divisor % k)) {
n /= k;
divisor /= k;
}
}
p *= n % 2014;
}
fprintf(f, "%d\n", p % 2014);
}
fclose(f);
return 0;
}

17
THT/B/QG-2014/guess.pas Normal file
View file

@ -0,0 +1,17 @@
uses dic;
var
s: string = '';
i: byte;
c: char;
begin
for i := 1 to 50 do
begin
c := get_char_at_pos(i);
if c = '#' then
answer(s)
else
s := s + c
end
end.

21
THT/B/QG-2014/sample.pas Executable file
View file

@ -0,0 +1,21 @@
uses dic;
var
answer1: char;
answer2, answer3, answer4: longint;
begin
answer1 := get_char_at_pos(4);
writeln('Vi tri thu 4 cua xau can tim la: ', answer1);
answer2 := count_char('c');
writeln('So luong ki tu c trong tu can tim la: ', answer2);
answer3 := count_char('a');
writeln('So luong ki tu a trong tu can tim la: ', answer3);
answer4 := count_char('n');
writeln('So luong ki tu n trong tu can tim la: ', answer4);
answer('can');
end.

270
THT/B/QG-2014/xephinh.pas Normal file
View file

@ -0,0 +1,270 @@
uses math;
type
gift_t = record
filename: string;
m, n, a, b, c: byte
end;
piece_t = array[1..3, 1..3] of boolean;
board_t = array[1..15, 1..30] of byte;
const
gifts: array[1..5] of gift_t = (
(filename: 'XEPHINH1.TXT'; m: 6; n: 5; a: 4; b: 2; c: 2),
(filename: 'XEPHINH2.TXT'; m: 8; n: 12; a: 8; b: 18; c: 0),
(filename: 'XEPHINH3.TXT'; m: 7; n: 13; a: 12; b: 5; c: 7),
(filename: 'XEPHINH4.TXT'; m: 3; n: 10; a: 4; b: 2; c: 2),
(filename: 'XEPHINH5.TXT'; m: 15; n: 6; a: 0; b: 10; c: 10)
);
pieces: array[1..3] of piece_t = (
((false, true, false), (false, true, false), (false, true, false)),
((false, true, true), (false, true, false), (false, true, false)),
((false, true, true), (false, true, false), (false, true, true))
);
var
f: text;
i, m, n, a, b, c: byte;
init_board: board_t;
done: boolean;
function divide(dividend, divisor: smallint): smallint;
begin
if dividend mod divisor = 0 then
exit(dividend div divisor);
divide := dividend div divisor + 1
end;
function modulo(dividend, divisor: smallint): smallint;
begin
if dividend mod divisor = 0 then
exit(divisor);
modulo := dividend mod divisor
end;
function rotate(
piece: piece_t;
quarter: byte
): piece_t;
var
i, j: byte;
begin
if quarter = 0 then
exit(piece);
for i := 1 to 3 do
for j := 1 to 3 do
rotate[i][j] := piece[j][4 - i];
exit(rotate(rotate, pred(quarter)))
end;
function flip(piece: piece_t): piece_t;
var
i, j: byte;
begin
for i := 1 to 3 do
for j := 1 to 3 do
flip[i][j] := piece[4 - i][j]
end;
function putable(
board: board_t;
y, x: byte;
piece: piece_t
): boolean;
var
yoff, xoff, i, j: byte;
begin
if not piece[1][1] then
if piece[1][2] then
begin
yoff := 1;
xoff := 2
end
else
begin
yoff := 2;
xoff := 1
end
else
begin
yoff := 1;
xoff := 1
end;
for i := 1 to 3 do
for j := 1 to 3 do
if not piece[i][j] then
continue
else if not inrange(y + i - yoff, 1, m) or
not inrange(x + j - xoff, 1, n) or
(board[y + i - yoff][x + j - xoff] > 0) then
exit(false);
putable := true
end;
function put(
board: board_t;
y, x: byte;
piece: piece_t;
no: byte
): board_t;
var
yoff, xoff, i, j: byte;
begin
if not piece[1][1] then
if piece[1][2] then
begin
yoff := 1;
xoff := 2
end
else
begin
yoff := 2;
xoff := 1
end
else
begin
yoff := 1;
xoff := 1
end;
for i := 1 to 3 do
for j := 1 to 3 do
if piece[i][j] then
board[y + i - yoff][x + j - xoff] := no;
exit(board)
end;
procedure solve(
board: board_t;
position: smallint;
no: byte
);
var
y, x: smallint;
i: byte;
begin
if done then
exit;
while (board[divide(position, n)][modulo(position, n)] > 0) and
(position <= m * n) do
inc(position);
if position > m * n then
begin
for y := 1 to m do
begin
for x := 1 to n - 1 do
write(f, board[y][x], ' ');
writeln(f, board[y][n])
end;
done := true;
exit
end;
y := divide(position, n);
x := modulo(position, n);
for i := 0 to 1 do
if (a > 0) and
putable(board, y, x, rotate(pieces[1], i)) then
begin
dec(a);
solve(put(board, y, x, rotate(pieces[1], i), no), position, no + 1);
inc(a)
end;
for i := 0 to 3 do
if (b > 0) and
putable(board, y, x, rotate(pieces[2], i)) then
begin
dec(b);
solve(put(board, y, x, rotate(pieces[2], i), no), position, no + 1);
inc(b)
end;
for i := 1 to 3 do
if (b > 0) and
putable(board, y, x, rotate(flip(pieces[2]), i)) then
begin
dec(b);
solve(put(board, y, x, rotate(flip(pieces[2]), i), no), position, no + 1);
inc(b)
end;
for i := 0 to 3 do
if (c > 0) and
putable(board, y, x, rotate(pieces[3], i)) then
begin
dec(c);
solve(put(board, y, x, rotate(pieces[3], i), no), position, no + 1);
inc(c)
end;
end;
begin
for i := 1 to 5 do
begin
assign(f, gifts[i].filename);
rewrite(f);
m := gifts[i].m;
n := gifts[i].n;
for a := 1 to m do
for b := 1 to n do
init_board[a][b] := 0;
a := gifts[i].a;
b := gifts[i].b;
c := gifts[i].c;
done := false;
solve(init_board, 1, 1);
close(f)
end;
assign(f, 'XEPHINH4.TXT');
reset(f);
for m := 1 to 3 do
for n := 1 to 10 do
read(f, init_board[m][n]);
close(f);
assign(f, 'XEPHINH4.TXT');
rewrite(f);
for a := 0 to 4 do
for m := 1 to 3 do
begin
for n := 1 to 9 do
write(f, init_board[m][n] + a * 8, ' ');
writeln(f, init_board[m][10] + a * 8)
end;
close(f);
assign(f, 'XEPHINH5.TXT');
reset(f);
for m := 1 to 15 do
for n := 1 to 6 do
read(f, init_board[m][n]);
close(f);
assign(f, 'XEPHINH5.TXT');
rewrite(f);
for m := 1 to 15 do
begin
for a := 0 to 3 do
for n := 1 to 6 do
write(f, init_board[m][n] + a * 20, ' ');
for n := 1 to 5 do
write(f, init_board[m][n] + 80, ' ');
writeln(f, init_board[m][6] + 80);
end;
close(f);
end.

View file

@ -1,6 +1,5 @@
#include <stdio.h>
const long long TESTS[] = {4, 3, 5, 6, 111, 222, 3333, 4444, 55555, 666666,
7777777, 88888888, 999999999, 123456789123456789,
1000000000000000000};