LSPITO - Help Conan ! (version 3)
Tác giả: ll931110
Ngôn ngữ: Pascal
program LSPITO;
const
input = '';
output = '';
maxn = 20;
var
list: array[1..20] of int64;
pp: array[0..20] of int64;
n: int64;
fi,fo: text;
procedure getlist;
var
k: integer;
q: int64;
begin
pp[0] := 1;
for k := 1 to maxn do pp[k] := pp[k - 1] * 2;
list[1] := 2;
for k := 1 to maxn - 1 do
begin
q := (pp[k] - 1) * 3 * pp[k] + pp[k + 1];
list[k + 1] := list[k] + q;
end;
end;
procedure openfile;
begin
assign(fi, input);
reset(fi);
assign(fo, output);
rewrite(fo);
end;
procedure solve;
var
i: integer;
t,inf,sup,med,tmp: int64;
flag: boolean;
begin
if n < 2 then
begin
if n = 1 then writeln(fo, 'Conan') else writeln(fo, 'Thu Uyen');
exit;
end;
i := 1;
while n > list[i] do inc(i);
if n = list[i] then
begin
writeln(fo, 'Thu Uyen');
exit;
end;
dec(i);
t := n - list[i];
flag := true;
inf := pp[i] + 1;
sup := pp[i + 1] - 1;
repeat
med := (inf + sup) div 2;
tmp := (med - pp[i]) * (med + pp[i] + 1);
if tmp = t then
begin
flag := false;
break;
end
else if tmp < t then inf := med + 1 else sup := med - 1;
until inf > sup;
inf := pp[i] + 1;
sup := pp[i + 1] - 1;
repeat
med := (inf + sup) div 2;
tmp := (med - pp[i]) * (med + pp[i] + 1);
if tmp = t + med then
begin
flag := false;
break;
end
else if tmp < t + med then inf := med + 1 else sup := med - 1;
until inf > sup;
if flag then writeln(fo, 'Conan') else writeln(fo, 'Thu Uyen');
end;
procedure closefile;
begin
close(fi);
close(fo);
end;
begin
getlist;
openfile;
while not eof(fi) do
begin
readln(fi, n);
solve;
end;
closefile;
end.