|
[ stf @ 30.04.2005. 09:33 ] @
| Evo jednog zadatka sa olimpijade iz informatike. On mi se čini lakšim od npr. teroriste sa prošlog saveznog i njemu sličnim. Šaljite svoja rešenja, ako dođete do njih, a i ja ću svoje, pošto ga još nisam u potpunosti oblikovao. U stvari, još bolje šaljite različita obrazloženja, instrukcije i slično. Valjalo bi da program proradi za 1 sec. Neke moje ideje ću vam kasnije navesti, a zanimaju me i vaše. Evo zadatka:
PROBLEM A: UMETNOST RATOVANjA
UVOD:
,,Period zaraćenih država“ (473 – 221. pre nove ere) odnosi se na vekove nemirnih ,,Prolećnih i jesenjih perioda“. Kina je bila podeljena na mnogo manjih država koje su se stalno borile međusobno. Za razliku od prethodnih vekova, kada je viteštvo igralo glavnu ulogu u bitkama i kada su se države uglavnom borile zbog ravnoteže moći ili da reše razmirice, u ovom periodu cilj bitke je bio da se pokore i potpuno unište druge države. Sedam država (Kvi, Ču, Jan, Han, Čao, Vej i Kin), poznatijih kao ,,Sedam moćnih“ igrali su glavnu ulogu. Posle brojnih bitaka, Kin je porazila ostale države, jednu po jednu, stavljajući tako tačku na ,,Period zaraćenih država“.
Zadatak je da se pomoću mape koja pokazuje položaj glavnog grada svake države i granice država označenih kao niz duži, odredi koja se država borila sa kojom. Ako dve države imaju zajedničku granicu, one su ratovale.
ULAZNI PODACI:
Ulaz sadrži nekoliko slučajeva. Svaki slučaj počinje linijom koja sadrži dva broja: broj n (1 ≤ n ≤ 600), broj država i broj m (1 ≤ m ≤ 4000), broj graničnih duži. U sledećih n redova se nalaze koordinate svakog glavnog grada, po dva broja u svakom redu. Zatim su u narednih m redova, m graničnih duži. Svaki od tih redova sadrži četiri cela broja: x1, y1, x2 i y2 koji označavaju da postoji granična duž od (x1, y1) do (x2, y2). (U ulazu nije dato u kakvom su odnosu dve države sa različitih strana granice, ali može se zaključiti iz pravca prostiranja granice.)
Svaka država je obuhvaćena celovitom graničnom linijom. Neke države su okružene pustinjom. Prema tome, granični segment ili deli dve države ili državu od pustinje. Nije moguće da se ista država ili pustinja nalazi sa obe strane granične duži. Može postojati više glavnih gradova u svakoj državi, ali ne postoji glavni grad pustinje. Granične duži se ne ukrštaju i mogu se sresti samo u krajnjim tačkama.
Ulaz se završava naredbom n = m = 0.
IZLAZNI PODACI:
Za svaku situaciju je potrebno ispisati n redova koji opisuju neprijatelje n-te države (setite se da ako dve države dele granicu, oni su neprijatelji). Svaki red počinje brojem x (broj neprijatelja koje data država ima). Zatim sledi x brojeva koji označavaju neprijatelje države. Ovi brojevi su između 1 i n. Broj 1 se odnosi na prvi glavni grad koji se pojavljuje u ulazu, a broj n označava poslednji.
(U ovom primeru se u prvih osam redova ulaz spojio sa izlazom (moja greska izvinjavam se!!!). Dakle u prvih 5 redova se po prva dva broja odnose na ulaz, ostali na izlaz. Slicno, se u naredna 3 reda, prva 4 broja odnose na ulaz, a ostali na izlaz)
PRIMER:
Ulaz: Izlaz:
4 12 2 2 4
3 2 2 1 3
11 8 2 2 4
12 17 2 1 3
1 19 1 2
0 0 10 0 2 1 3
10 0 20 0 2 2 4
20 0 20 10 1 3
20 10 20 20
20 20 10 20
10 20 0 20
0 20 0 10
0 10 0 0
10 0 10 10
0 10 10 10
20 10 10 10
10 20 10 10
4 16
170 13
24 88
152 49
110 130
60 60 140 60
140 60 140 140
140 140 60 140
60 140 60 60
0 0 200 0
200 0 200 200
200 200 0 200
0 200 0 0
40 40 160 40
160 40 160 160
160 160 40 160
40 160 40 40
20 20 180 20
180 20 180 180
180 180 20 180
20 180 20 20
0 0
Okačiću kasnije i probem B,C,D... , ali idemo redom !!!
|
[ Divjak @ 04.05.2005. 16:14 ] @
Nisam ranije ima vremena, mada nemam ni sada, ali mi se bas radi ovako nesto...
Aj samo okaci validni test ulaz i izlaz, ne mogu da se snadjem u ovome...
Okaci ih kao fajlove....
pozdrav...
[ --SOULMaTe-- @ 04.05.2005. 16:16 ] @
ovo bi trebalo da leti u Art of Programming
[ Divjak @ 05.05.2005. 14:12 ] @
Evo ja nisam mogao da cekam, pa sam uradio zadatak predpostavljajuci da ulaz za test primer izgleda ovako:
kineske_drzave.in
Code:
4 12
3 2
11 8
12 17
1 19
0 0 10 0
10 0 20 0
20 0 20 10
20 10 20 20
20 20 10 20
10 20 0 20
0 20 0 10
0 10 0 0
10 0 10 10
0 10 10 10
20 10 10 10
10 20 10 10
Kod sam zavrsio pre 10 minuta, tako da je sansa da mi se neka greska podkrala veoma velika...
No, to nije toliko ni bitno, mislim da je algoritam dosta dobar a radi po principu:
1) Nalazi jednacine pravih granica i iscrtava ih u 2D matricu (ovde jedino moze nastati problem, ako su MAX koordinate jako velike, ja sam uzeo da su 1000, mada znam da na takmicenjima obicno bude mnogo vece...)
2) 'farba drzavu' :) svakog glavnog grada i pronalazi granice preko kojih zatim prelazi i farba drzave u koje je stigao sve dok ne naidje na koordinate glavnog grada... Kada naidje na iste, tu drzavu ubacuje kao neprijatelja pocetne...
e sad postoje nacini da se ovo optimizuje, smanji broj pretrazivanja, pa cak mozda i izbegne farbanje susednih drzava, a ostane se samo pri trazenju granice neke drzave, pa proveravanje da li je ista granica jos neke... ovo je definitivno bolje resenje...
evo kako to izgleda sada:
kina.pas
Code:
PROGRAM KINA;
TYPE
KOORDINATE = RECORD
X,Y:INTEGER;
END;
VAR
GRADOVI : ARRAY[1..600] OF KOORDINATE;
GRANICE : ARRAY[1..4000] OF ARRAY[1..2] OF KOORDINATE;
I,J,M,N,Z : INTEGER;
GRID : ARRAY[-1..1000,-1..1000] OF INTEGER;
GRIDT : ARRAY[-1..1000,-1..1000] OF INTEGER;
NEPR : ARRAY[1..600] OF ARRAY[1..600] OF INTEGER;
MAXX,MAXY : INTEGER;
VEC : ARRAY[1..600] OF ARRAY[1..600] OF BOOLEAN;
U : ARRAY[1..600] OF INTEGER;
PROCEDURE LOAD;
VAR FIN : TEXT;
BEGIN
ASSIGN(FIN,'kineske_drzave.IN');
RESET(FIN);
READ(FIN,N);
READLN(FIN,M);
FOR I:= 1 TO N DO BEGIN
READ (FIN,GRADOVI[I].X);
READLN (FIN,GRADOVI[I].Y);
END;
FOR I := 1 TO M DO BEGIN
READ (FIN,GRANICE[I,1].X);
READ (FIN,GRANICE[I,1].Y);
READ (FIN,GRANICE[I,2].X);
READLN (FIN,GRANICE[I,2].Y);
END;
CLOSE(FIN);
END;
FUNCTION MAX(A,B:INTEGER):INTEGER;
BEGIN
IF A>B THEN MAX:=A ELSE MAX:=B;
END;
FUNCTION MIN(A,B:INTEGER):INTEGER;
BEGIN
IF A>B THEN MIN:=B ELSE MIN:=A;
END;
PROCEDURE MAXX_AND_MAXY;
BEGIN
MAXX:=0;
MAXY:=0;
FOR I:=1 TO M DO BEGIN
IF GRANICE[I,1].X>MAXX THEN MAXX:=GRANICE[I,1].X;
IF GRANICE[I,2].X>MAXX THEN MAXX:=GRANICE[I,2].X;
IF GRANICE[I,1].Y>MAXY THEN MAXY:=GRANICE[I,1].Y;
IF GRANICE[I,2].Y>MAXY THEN MAXY:=GRANICE[I,2].Y;
END;
END;
PROCEDURE ISCRTAJGRID;
VAR
TX1,TX2,TY1,TY2 : INTEGER;
YK : REAL;
BEGIN
FOR I:=-1 TO MAXX+1 DO BEGIN
FOR J:=-1 TO MAXY+1 DO BEGIN
GRID[I,J]:=-1;
END;
END;
FOR I:= 0 TO MAXX DO
FOR J:=0 TO MAXY DO GRID[I,J]:=0;
FOR I:=1 TO M DO BEGIN
TX1:=GRANICE[I,1].X;
TY1:=GRANICE[I,1].Y;
TX2:=GRANICE[I,2].X;
TY2:=GRANICE[I,2].Y;
IF TX1=TX2 THEN BEGIN
FOR J:=MIN(TY1,TY2) TO MAX(TY1,TY2) DO BEGIN
GRID[TX1,J]:=1;
END;
END
ELSE IF TY1=TY2 THEN BEGIN
FOR J:=MIN(TX1,TX2) TO MAX(TX1,TX2) DO BEGIN
GRID[J,TY1]:=1;
END;
END
ELSE BEGIN
FOR J:=MIN(TX1,TX2) TO MAX(TX1,TX2) DO BEGIN
YK:=((GRANICE[I,2].Y-GRANICE[I,1].Y)*J +
(GRANICE[I,1].Y-GRANICE[I,2].Y)*GRANICE[I,1].X -
(GRANICE[I,1].X-GRANICE[I,2].X)*GRANICE[I,1].Y) /
(GRANICE[I,2].X-GRANICE[I,1].X);
GRID[J,TRUNC(YK)]:=1;
END;
END;
END;
FOR I:=1 TO N DO GRID[GRADOVI[I].X,GRADOVI[I].Y]:=5+I;
END;
PROCEDURE PAINTROOM2(A,B : INTEGER);
BEGIN
IF GRIDT[A,B]=0 THEN BEGIN
GRIDT[A,B]:=1;
IF GRIDT[A-1,B]=0 THEN PAINTROOM2(A-1,B);
IF GRIDT[A+1,B]=0 THEN PAINTROOM2(A+1,B);
IF GRIDT[A,B-1]=0 THEN PAINTROOM2(A,B-1);
IF GRIDT[A,B+1]=0 THEN PAINTROOM2(A,B+1);
IF GRIDT[A-1,B]>5 THEN BEGIN IF VEC[Z,GRIDT[A-1,B]]=FALSE THEN BEGIN
INC(U[Z]);
NEPR[Z,U[Z]]:=GRIDT[A-1,B]-5;
VEC[Z,GRIDT[A-1,B]]:=TRUE;
END;
END;
IF GRIDT[A+1,B]>5 THEN BEGIN IF VEC[Z,GRIDT[A+1,B]]=FALSE THEN BEGIN
INC(U[Z]) ;
NEPR[Z,U[Z]]:=GRIDT[A+1,B]-5;
VEC[Z,GRIDT[A+1,B]]:=TRUE;
END;
END;
IF GRIDT[A,B-1]>5 THEN BEGIN IF VEC[Z,GRIDT[A,B-1]]=FALSE THEN BEGIN
INC(U[Z]);
NEPR[Z,U[Z]]:=GRIDT[A,B-1]-5;
VEC[Z,GRIDT[A,B-1]]:=TRUE;
END;
END;
IF GRIDT[A,B+1]>5 THEN BEGIN IF VEC[Z,GRIDT[A,B+1]]=FALSE THEN BEGIN
INC(U[Z]);
NEPR[Z,U[Z]]:=GRIDT[A,B+1]-5;
VEC[Z,GRIDT[A,B+1]]:=TRUE;
END;
END;
END
ELSE IF GRIDT[A,B]=2 THEN BEGIN
GRIDT[A,B]:=0;
PAINTROOM2(A,B);
END;
END;
PROCEDURE PAINTROOM(A,B : INTEGER);
BEGIN
IF GRIDT[A,B]=0 THEN BEGIN
GRIDT[A,B]:=3;
IF GRIDT[A-1,B]=0 THEN PAINTROOM(A-1,B);
IF GRIDT[A+1,B]=0 THEN PAINTROOM(A+1,B);
IF GRIDT[A,B-1]=0 THEN PAINTROOM(A,B-1);
IF GRIDT[A,B+1]=0 THEN PAINTROOM(A,B+1);
IF GRIDT[A-1,B]=1 THEN GRIDT[A-1,B]:=2;
IF GRIDT[A+1,B]=1 THEN GRIDT[A+1,B]:=2;
IF GRIDT[A,B-1]=1 THEN GRIDT[A,B-1]:=2;
IF GRIDT[A,B+1]=1 THEN GRIDT[A,B+1]:=2;
END
ELSE IF GRID[A,B]>5 THEN BEGIN
GRIDT[A,B]:=0;
PAINTROOM(A,B);
END;
END;
PROCEDURE RESET;
BEGIN
FOR I:=-1 TO MAXX+2 DO BEGIN
FOR J:=-1 TO MAXY+2 DO BEGIN
GRIDT[I,J]:=GRID[I,J];
END;
END;
END;
PROCEDURE ISPISIGRID;
BEGIN
FOR I:=-1 TO MAXX DO BEGIN
FOR J:=-1 TO MAXY DO BEGIN
WRITE(GRIDT[I,J]);
WRITE(' ');
END;
WRITELN;
END;
END;
PROCEDURE TRAZIK2;
BEGIN
FOR I:=1 TO 22 DO
FOR J:=1 TO 22 DO IF GRIDT[I,J]=2 THEN PAINTROOM2(I,J);
END;
PROCEDURE ISPISIOUT;
VAR FOUT:TEXT;
BEGIN
ASSIGN(FOUT,'kineske_drzave.out');
REWRITE(FOUT);
FOR I:=1 TO N DO BEGIN
IF (U[Z]=1) AND (NEPR[I,1]=0) THEN WRITE(FOUT,0,' ') ELSE
WRITE(FOUT,U[Z],' ');
J:=1;
WHILE (NEPR[I,J] <> 0 ) DO BEGIN
WRITE (FOUT,NEPR[I,J],' ');
INC(J);
END;
WRITELN(FOUT);
END;
CLOSE(FOUT);
END;
BEGIN
LOAD;
MAXX_AND_MAXY;
ISCRTAJGRID;
FOR Z:=1 TO N DO BEGIN
RESET;
PAINTROOM(GRADOVI[Z].X,GRADOVI[Z].Y);
TRAZIK2;
END;
ISPISIOUT;
END.
i na kraju se dobija trazeno
kineske_drzave.out
Code:
2 4 2
2 1 3
2 4 2
2 1 3
ako budem imao volje, napisacu posle i optimalnije resenje...
Postuj sledeci problem...
[ stf @ 06.05.2005. 11:11 ] @
Bravo. Lepo resenje. A sad evo (po meni) nesto tezeg zadatka.
PROBLEM B: BEDžIGNSKA STRAŽA
UVOD:
Bedžing je jednom bio okružen sa četiti kruga gradskih zidina: Nedostupni gradski zid, Carski gradski zid, Unutrašnji gradski zid i, konačno, Spoljašnji gradski zid. Većina ovih zidina su bili razrušeni 50-ih i 60-ih da bi se napravila saobraćajna mreža. Zidovi su se čuvali pomoću kula, pri čemu je po jedan stražar živeo u svakoj kuli. Zid se može zamisliti kao veliki krug, gde je svaki stražar kule ima tačno dva suseda.
Stražar je morao voditi računa na njegov deo zida čitavog dana, pa je morao ostati u kuli. Ovo je veoma dosadan posao, pa je važno da su stražari motivisani. Ima nekoliko različitih vrsta nagrada koje se mogu uručiti stražaru: za odličnu službu, za najlepšu uniformu, za gospodara straže, za najbolje čulo vida, itd. Centralni odsek za gradsku stražu je odredio koliko nagrada treba da se uruče svakom od stražara. Više stražara može dobiti istu nagradu. Potrebno je obratiti pažnju na jednu stvar: ne treba davati istu nagradu susedima. Zadatak je da se napiše program koji određuje koliko različitih vrsta nagrada treba da održe stražare motivisanim.
ULAZNI PODACI:
Ulaz sadrži nekoliko slučajeva. Svaki slučaj počinje u redu koji sadrži broj n (1 ≤ n ≤ 10000), broj kula. Svaki od sledećih n redova odgovara n-tom stražaru: svaki red sadrži jedan broj, koji označava broj nagrada koji stražar zahteva. Svaki stražar može tražiti najmanje 1, a najviše 100000 nagrada. i-ti stražar i i+1-ti sused ne mogu primiti istu nagradu. Prvi stražar i zadnji stražar su takođe susedi.
Ulaz se završava naredbom n = 0.
IZLAZNI PODACI:
Za svaki slučaj treba ispisati red koji sadrži broj x, minimalan broj vrsta nagrada koji treba da motivišu stražare. Ako imamo x vrsta nagrada, onda možemo dati onoliko nagrada svakom stražaru koliko on zahteva. Stražar može primiti samo jednu nagradu datog tipa.
PRIMER:
Ulaz: ----------- Izlaz:
3----------------------------- 8
4 ------------------------ 5
2---------------- -----------------3
2
5
2
2
2
2
2
5
1
1
1
1
1
0
[ Divjak @ 07.05.2005. 14:11 ] @
Ovaj je stvarno tezak, iako na prvi pogled ne deluje tako...
No, evo resenja, s'tim sto sam opet radio tako da radi za jedan ulaz po fajlu a ne kako je ovde predstavljeno za 3... mada nije nikakav problem da se prepravi...
Znaci ovaj program ce korektno raditi ako se ulaz predstavi kroz 3 fajla:
[4 #13, 3 #13, 2 #13, 2 #13] , [5 #13, 1 #13, 1 #13, 1 #13, 1 #13, 1 #13] i [5 #13, 2 #13, 2 #13, 2 #13, 2 #13, 2 #13]
Algoritam radi otprilike ovako:
1) Pronalazi kulu koja zahteva najvise poklona posto ona kao i njen veci sused moraju biti osnova...
2) Redom ide dok se i menja od 1 do n iskljucujuci malo pre dve pomenute kule i trazi u vrednostima ostalih kula zbir koji je veci od potraznje i-te kule...
Ako takav zbir postoji a da se pritom vrednosti kula koriste parcijalno (prvo po 1, pa ako nije dosta po 2,...) i da se susedne kule i-te kule ne racunaju, kao ni delovi vrenosti kula koje su susedne kule iskoristile za svoju sumu ( 'desni' sused ce se gledati samo kod n-te kule...), i-ta kula ne menja rezultat, u protivnom povecava ga za potraznja i-te kule - suma ostalih slobodnih vrednosti...
Code:
PROGRAM BEJING;
TYPE
KULA = RECORD
BR : INTEGER;
PO : LONGINT;
END;
VAR
P : ARRAY[1..10000] OF KULA;
UB : ARRAY[1..10000] OF BOOLEAN;
VG : ARRAY[1..10000] OF LONGINT;
O : ARRAY[1..10000] OF LONGINT;
O1: ARRAY[1..10000] OF LONGINT;
M,MINI : LONGINT;
R,N,I,S,J,Z : INTEGER;
X: LONGINT;
max,max1:longint;
G:INTEGER;
FUNCTION MAXIMUM(A,B:INTEGER):INTEGER;
BEGIN
IF A>B THEN MAXIMUM:=A ELSE MAXIMUM:=B;
END;
PROCEDURE LOAD;
VAR
FIN : TEXT;
BEGIN
max:=0;
max1:=0;
ASSIGN(FIN,'bejing.in');
RESET(FIN);
READLN(FIN,N);
FOR I:=1 TO N DO BEGIN
P[I].BR:=I;
READLN(FIN,P[I].PO);
if p[i].po>P[max].PO then max:=p[i].br;
END;
G:=MAX;
ub[max]:=true;
if max=1 then BEGIN
IF P[N].PO>P[2].PO THEN BEGIN MAX1:=N; G:=N END ELSE MAX1:=2;
END
else if max=n then BEGIN
IF P[N-1].PO>P[1].PO THEN BEGIN MAX1:=N-1; G:=N-1 END ELSE MAX1:=1;
END
else BEGIN
IF P[MAX+1].PO>P[MAX-1].PO THEN MAX1:=MAX+1 ELSE BEGIN MAX1:=MAX-1; G:=MAX-1 END;
END;
ub[max1]:=true;
max:=p[max].po;
max1:=p[max1].po;
mini:=max+max1;
CLOSE(FIN);
END;
PROCEDURE RESETO;
BEGIN
FOR I:=1 TO N DO BEGIN
O[I]:=P[I].PO;
O1[I]:=P[I].PO;
VG[I]:=0;
END;
END;
PROCEDURE MAIN;
VAR T,ALL : LONGINT;
RADI : BOOLEAN;
BEGIN
R:=1;
IF N=1 THEN BEGIN
MINI:=P[1].PO;
END
ELSE IF N=2 THEN BEGIN
MINI:=P[1].PO+P[2].PO;
END
ELSE IF N=3 THEN BEGIN
MINI:=P[1].PO+P[2].PO+P[3].PO;
END
ELSE IF N=4 THEN BEGIN
MINI:=MAXIMUM(P[1].PO,P[3].PO)+MAXIMUM(P[2].PO,P[4].PO);
END
ELSE IF N>4 THEN BEGIN
FOR I:=1 TO N DO BEGIN
IF UB[I]=FALSE THEN BEGIN
T:=P[I].PO;
ALL:=0;
IF R=1 THEN BEGIN
IF I=1 THEN X:=N-1;
IF I=N THEN X:=N-2
ELSE X:=N;
WHILE (O[X]<>0) AND (ALL<T) DO BEGIN
M:=O[N];
J:=1;
WHILE (O[N]=M) AND (ALL<T) AND (J<=N) DO BEGIN
IF J<>I THEN BEGIN
RADI:=FALSE;
IF I=1 THEN BEGIN
IF (P[J].BR<>P[2].BR) AND (P[J].BR<>P[N].BR) THEN RADI:=TRUE;
END
ELSE IF I=N THEN BEGIN
IF (P[J].BR<>P[1].BR) AND (P[J].BR<>P[N-1].BR) THEN RADI:=TRUE;
END
ELSE BEGIN
IF (P[J].BR<>P[I-1].BR) AND (P[J].BR<>P[I+1].BR) THEN RADI:=TRUE;
END;
IF RADI THEN BEGIN
IF O[J]>0 THEN BEGIN
IF I=N THEN BEGIN
FOR Z:=1 TO N DO BEGIN
O[Z]:=O[Z]-VG[Z];
END;
END;
IF O[J]>0 THEN BEGIN
INC(ALL);
DEC(O[J]);
IF J=G THEN INC(VG[I]);
END;
END;
END;
END;
INC(J);
END;
END;
R:=2;
FOR J:=1 TO N DO BEGIN
O1[J]:=P[J].PO-(O1[J]-O[J]);
END;
IF T>ALL THEN MINI:=MINI+T-ALL;
END
ELSE IF R=2 THEN BEGIN
IF I=1 THEN X:=N-1;
IF I=N THEN X:=N-2
ELSE X:=N;
WHILE (O1[X]<>0) AND (ALL<T) DO BEGIN
M:=O1[N];
J:=1;
WHILE (O1[N]=M) AND (ALL<T) AND (J<=N) DO BEGIN
IF J<>I THEN BEGIN
RADI:=FALSE;
IF I=1 THEN BEGIN
IF (P[J].BR<>P[2].BR) AND (P[J].BR<>P[N].BR) THEN RADI:=TRUE;
END
ELSE IF I=N THEN BEGIN
IF (P[J].BR<>P[1].BR) AND (P[J].BR<>P[N-1].BR) THEN RADI:=TRUE;
END
ELSE BEGIN
IF (P[J].BR<>P[I-1].BR) AND (P[J].BR<>P[I+1].BR) THEN RADI:=TRUE;
END;
IF RADI THEN BEGIN
IF O1[J]>0 THEN BEGIN
IF I=N THEN BEGIN
FOR Z:=1 TO N DO BEGIN
O1[Z]:=O1[Z]-VG[Z];
END;
END;
IF O1[J]>0 THEN BEGIN
INC(ALL);
DEC(O1[J]);
IF J=G THEN INC(VG[I]);
END;
END;
END;
END;
INC(J);
END;
END;
R:=1;
FOR J:=1 TO N DO BEGIN
O[J]:=P[J].PO-(O[J]-O1[J]);
END;
IF T>ALL THEN MINI:=MINI+ALL-T;
END;
END;
UB[I]:=TRUE;
END; {OD I}
END;
END;
PROCEDURE WRITEOUT;
VAR
FOUT : TEXT;
BEGIN
ASSIGN(FOUT,'bejing.out');
REWRITE(FOUT);
WRITELN(FOUT,MINI);
CLOSE(FOUT);
END;
BEGIN
LOAD;
RESETO;
MAIN;
WRITEOUT;
END.
[ Sinalco @ 15.05.2005. 02:36 ] @
Nekako mi se ne svidjaju vasi kodovi...
Treba malo lepse organizovati program, cak i sa komentarima! Ovo govorim iz iskustva, jer se cak i ja ne snalazim u neki mojim programima u 1. i 2. razredu srednje :-)
Sa kojih olimpijada su zadaci?
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|