http://www.teaduskool.ut.ee/orb.aw/class=file/action=preview/id=6379/poh.et.pdf
2. Kurgid - 1 sekund - 30 punkti
Talunikul on ristküliku kujuline põld ja ta tahab sellele teha kurgipeenra. Selleks, et peenart oleks parem masinatega harida, peab ka peenar olema ristküliku kujuline ja selle servad peavad olema paralleelsed põllu servadega.
Põllul on kaks mobiilimasti. Selleks, et peenart saaks öökülmade kaitseks kilega katta, ei tohi mastid olla peenra sees.
Kirjutada programm, mis leiab peenra maksimaalse võimaliku pindala.
Sisend. Tekstifaili kurgid2.sis esimesel real on põllu pikkus X (0 < X <= 109) ja laius Y (0 < Y <= 109). Faili teisel real on esimese masti koordinaadid X1 (0 <= X1 <= X) ja Y1 (0 <= Y1 <= Y ), mis näitavad, et mast on põllu vasakust otsast kaugusel X1 ja alumisest küljest kaugusel Y1. Faili kolmandal real on teise masti koordinaadid X2 ja Y2. Kõik arvud on täisarvud. Masti läbimõõt on põllu suurusega võrreldes nii väike, et seda pole vaja arvestada.
Väljund. Tekstifaili kurgid2.val ainsale reale väljastada täisarv S — otsitav pindala.
Näide. kurgid2.sis 10 5 4 1 8 4 | kurgid2.val 32 |
Näide. kurgid2.sis 10 5 4 1 7 4 | kurgid2.val 30 |
Alloleval joonisel on vasakul kujutatud esimese ja paremal teise näite lahendus.
Hindamine. Testides summaarse väärtusega 10 punkti on X <= 100 ja Y <= 100.
Kuna selle kohta initsiaalset (ka mittetöötavat) lahendust polnud siis siin on puhtalt minu lahendusvariant.
Code Snippet
- #include <stdio.h>
- #include <stdlib.h>
-
- FILE *sisf;
- FILE *valf;
-
- int main(int argc, char *argv[])
- {
- int x, y, x1, y1, x2, y2;
- int val[4];
-
- sisf = fopen( "kurgid2.sis", "r" );
- fscanf( sisf, "%i %i\n%i %i\n%i %i", &x, &y, &x1, &y1, &x2, &y2 );
-
- val[0]= abs((x2-x1)*y);
- val[1] = abs((y2-y1)*x);
-
- val[2] = x1>x2 ? (x-x2)*y1 : (x-x1)*y2;
- val[3] = y1>y2 ? (y-y2)*x1 : (y-y1)*x2;
-
- int max = val[0];
- for(int i=0; i<4;i++)
- max = max < val[i] ? val[i] : max ;
-
- printf("Max on %i\n", max);
-
- valf = fopen("kurgid2.val", "w");
- fprintf(valf, "%i\n", max);
- fclose(valf);
- return 0;
- }