Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] - Olimpijada (problem A)

[es] :: Art of Programming :: [Zadatak] - Olimpijada (problem A)

[ Pregleda: 2852 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

stf

Član broj: 51276
Poruke: 65
*.139.eunet.yu.



Profil

icon [Zadatak] - Olimpijada (problem A)30.04.2005. u 09:33 - pre 231 meseci
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 !!!

If you don't live for something, you will die for nothing.
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
*.beotel.net.



+1 Profil

icon Re: [Zadatak] - Olimpijada (problem A)04.05.2005. u 16:14 - pre 230 meseci
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...
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

--SOULMaTe--
Nemanja Skoric
Novi Sad

Član broj: 1464
Poruke: 173
*.nat-pool.nsad.sbb.co.yu.



Profil

icon Re: [Zadatak] - Olimpijada (problem A)04.05.2005. u 16:16 - pre 230 meseci
ovo bi trebalo da leti u Art of Programming
Don’t do drugs, sleep deprivation is better.
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
*.zrenjanin.beotel.net.



+1 Profil

icon Re: [Zadatak] - Olimpijada (problem A)05.05.2005. u 14:12 - pre 230 meseci
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...
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

stf

Član broj: 51276
Poruke: 65
*.183.EUnet.yu.



Profil

icon Re: [Zadatak] - Olimpijada (problem A)06.05.2005. u 11:11 - pre 230 meseci
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

If you don't live for something, you will die for nothing.
 
Odgovor na temu

Divjak
Vladimir Divjak
Student

Član broj: 4783
Poruke: 535
*.zrenjanin.beotel.net.



+1 Profil

icon Re: [Zadatak] - Olimpijada (problem A)07.05.2005. u 14:11 - pre 230 meseci
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.



And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
 
Odgovor na temu

Sinalco
Aleksandar Ilic
Nis

Član broj: 37708
Poruke: 14
212.200.11.*



Profil

icon Re: [Zadatak] - Olimpijada (problem A)15.05.2005. u 02:36 - pre 230 meseci
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?
 
Odgovor na temu

[es] :: Art of Programming :: [Zadatak] - Olimpijada (problem A)

[ Pregleda: 2852 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.