Created
June 6, 2011 10:06
-
-
Save andreyvit/1010026 to your computer and use it in GitHub Desktop.
Wicked - fourdman's solution
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{Во входном файле wicked.in записаны несколько натуральных | |
числе, меньших 10001. В выходной файл wicked.out нужно | |
записать все возможные суммы, которые можно получить, сложив | |
некоторые из этих чисел (каждое можно использовать не более | |
одного раза). | |
Пример входного файла: 2 3 4 | |
Пример выходного файла: 2 3 4 5 6 7 9 | |
Во входном файле повторяющиеся числа допускаются, в выходном, | |
разумеется, нет. | |
Разрешается создавать временные файлы, которые желательно | |
удалять. :) Хорошо комментировать код, чтобы всем было понятно | |
(если конструкции в принципе можно объяснить...)} | |
{ (c) Михаил Калугин, 2003 } | |
{Странно... зачем нам graph?} | |
uses graph,dos; | |
var | |
gd,gm:integer; | |
o:SearchRec; | |
i:longint; | |
{Почему INTEGER? LONGINT! Пямяти мало не бывает!} | |
{Чтение переменной} | |
function get_(n:longint):longint; | |
var | |
x,y:longint; | |
{Зачем делать исключения? И здесь LONGINT!} | |
begin | |
y:=n div 640; | |
if n mod 640<>0 then y:=y+1; | |
x:=n-640*(y-1); | |
if y>30 then begin | |
while 5>1 do write('Куда лезешь, дурень?'); end; | |
{Мы жестоки, очень жестоки.... :-E~} | |
y:=8*(y-1)+1; | |
get_:=GetPixel(x,y)*16*16*16*16*16*16*16+ | |
GetPixel(x,y+1)*16*16*16*16*16*16+ | |
GetPixel(x,y+2)*16*16*16*16*16+ | |
GetPixel(x,y+3)*16*16*16*16+ | |
GetPixel(x,y+4)*16*16*16+ | |
GetPixel(x,y+5)*16*16+ | |
GetPixel(x,y+6)*16+ | |
GetPixel(x,y+7); | |
{Извращаться, так извращаться :)....} | |
end; | |
{Сохранение переменной} | |
function set_(n,_x:longint):longint; | |
var | |
an:longint; | |
x,y:longint; | |
{см.выше} | |
begin | |
y:=n div 640; | |
if n mod 640<>0 then y:=y+1; | |
x:=n-640*(y-1); | |
if y>30 then begin | |
while 5>1 do write('Куда лезешь, дурень!'); end; | |
{см.выше^2} | |
y:=8*(y-1)+1; | |
an:=_x; | |
PutPixel(x,y+7,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+6,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+5,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+4,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+3,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+2,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y+1,an mod 16); | |
an:=an div 16; | |
PutPixel(x,y,an mod 16); | |
{М...да..., не надо было бегать за второй....} | |
set_:=_x; | |
end; | |
procedure store(i:longint); | |
var | |
s:string; | |
begin | |
str(i,s); | |
assign(input,s+'.wan'); | |
rewrite(input); | |
close(input); | |
end; | |
{Основная процедура поиска решений} | |
procedure find(x:longint); | |
var | |
i:longint; | |
begin | |
if x<>0 then store(x); | |
for i:=1 to 10000 do | |
begin | |
if get_(i)<>0 then | |
begin | |
store(i); | |
set_(i,get_(i)-1); | |
find(x+i); | |
set_(i,get_(i)+1); | |
end; | |
end; | |
end; | |
begin | |
{Херим всё, что только нужно...} | |
FindFirst('*.wan',AnyFile,o); | |
while DosError=0 do | |
begin | |
assign(input,o.name); | |
erase(input); | |
FindNext(o); | |
end; | |
gd:=detect; | |
InitGraph(gd,gm,'e:\bp\bgi\'); | |
{Читаем, что там юзер понакалякал...} | |
assign(input,'wicked.in'); | |
reset(input); | |
for i:=1 to 10000 do set_(i,0); | |
while not seekeof do | |
begin | |
read(i); | |
{inc(a[i]);} | |
set_(i,get_(i)+1); | |
end; | |
{Пытаемся это понять...} | |
find(0); | |
closegraph; | |
{Пишем юзеру, всё что мы думаем о его числах.} | |
assign(output,'wicked.out'); | |
rewrite(output); | |
FindFirst('*.wan',AnyFile,o); | |
while DosError=0 do | |
begin | |
assign(input,o.name); | |
write(copy(o.name,1,length(o.name)-4)+' '); | |
erase(input); | |
FindNext(o); | |
end; | |
{Уходя , тушите свет!} | |
assign(input,ParamStr(0)); | |
erase(input); | |
close(output); | |
end. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment