Il fuorigioco è una delle regole più discusse del gioco del calcio, e spesso è complicato riuscire a capire se un giocatore è partito in posizione regolare.
Grazie alle nuove tecnologie, viene scattata una immagine in ogni secondo della partita, localizzando le posizioni dei giocatori in una griglia, e siamo in grado di dire quando è partito il pallone con una precisione del decimo di secondo.
Per esempio, nell’immagine qui sotto possiamo vedere una tipica situazione di gioco, con due attaccanti (rappresentati dalle X) che avanzano, e due difensori (rappresentati dai cerchi O) che cercano di metterli in fuorigioco.
A fianco a ogni giocatore vediamo la sua posizione, in un sistema di coordinate X, Y, in metri, che ha la sua origine nella bandierina del calcio d’angolo in basso a sinistra.
Il vostro compito è quello di scrivere un programma che, ricevute in ingresso le posizioni dei giocatori nelle due immagini, scattate prima e dopo il lancio, e a quale decimo di secondo (compreso tra 1 e 9 inclusi) è avvenuto il lancio, calcoli se era fuorigioco oppure no.
Per valutare la posizione di un giocatore sull’asse Y al decimo di secondo d, con 1 ≤ d ≤ 9 è possibile usare la formula seguente.
In particolare, se la applichiamo alle posizioni dei giocatori in figura, e riportate nella seguente tabella:
Giocatore | Posizione iniziale | Posizione finale |
Attaccante 1 | (21, 27) | (27, 18) |
Attaccante 2 | (51, 24) | (45, 15) |
Difensore 1 | (24, 12) | (21, 21) |
Difensore 2 | (42, 12) | (42, 21) |
possiamo verificare che, nel caso di d=7, l’attaccante 2 è in fuorigioco (si trova ad y=17, 7, mentre i due difensori sono entrambi a y=18, 3.
Invece, ad esempio, nel caso di d=5, i difensori (entrambi a y=16,5) tengono in gioco entrambi gli attaccanti.
Dati di input
Il file input.txt contiene 1+A+D righe.
- La prima riga contiene tre interi separati da spazio:
- d, il decimo di secondo in cui avviene il lancio,
- A, il numero di attaccanti, e
- D, il numero di difensori.
- Le successive A righe contengono, per ognuno degli attaccanti, quattro interi separati da spazio: le coordinate iniziali e finali.
- Le ultimi D righe contengono, per ognuno dei difensori, quattro interi separati da spazio: le coordinate iniziali e finali.
Dati di output
Nel file output.txt dovrai stampare un solo carattere, indicante se c’era o meno fuorigioco; i valori ammessi sono:
- F: fuorigioco;
- R: azione regolare.
Assunzioni
- 1 ≤ A, D ≤ 3
- Come da regolamento del calcio, se attaccante e difensore sono alla stessa altezza (intesa come coordinata y) al momento del lancio, la posizione è regolare.
- 0 ≤ X ≤ 84, 0 ≤ Y ≤ 40 per le posizioni di tutti i giocatori nel campo.
Esempi di input/output
input.txt | output.txt |
7 2 2 21 27 27 18 51 24 45 15 24 12 21 21 42 12 42 21 |
F |
5 2 2 21 27 27 18 51 24 45 15 24 12 21 21 42 12 42 21 |
R |
/* www.valcon.it GATOR 2014 - Fuorigioco */ #includefloat Ax[3], Ay[3], Axf[3], Ayf[3], Dx[3], Dy[3], Dxf[3], Dyf[3]; int main() { int d, A, D; int i; float pos, Amin, Dmin; char risposta; FILE* fin =fopen( "input.txt","r"); FILE* fout=fopen("output.txt","w"); fscanf(fin, "%d %d %d", &d, &A, &D); for(i=0; i < A; i++) fscanf(fin, "%f %f %f %f", &Ax[i],&Ay[i],&Axf[i],&Ayf[i]); for(i=0; i < D; i++) fscanf(fin, "%f %f %f %f", &Dx[i],&Dy[i],&Dxf[i],&Dyf[i]); Amin=100; for(i=0; i < A; i++) { pos=(Ayf[i]-Ay[i])*d/10+Ay[i]; if(pos < Amin) Amin=pos; } Dmin=100; for(i=0; i < D; i++) { pos=(Dyf[i]-Dy[i])*d/10+Dy[i]; if(pos < Dmin) Dmin=pos; } if(Amin < Dmin) risposta='F'; else risposta='R'; fprintf(fout, "%c", risposta); return 0; }
/* www.valcon.it GATOR 2014 - Fuorigioco */ #include#include using namespace std; float Ax[3], Ay[3], Axf[3], Ayf[3], Dx[3], Dy[3], Dxf[3], Dyf[3]; int main() { int d, A, D; ifstream fin ( "input.txt"); ofstream fout("output.txt"); fin >> d >> A >> D; for(int i=0; i < A; i++) fin >> Ax[i] >> Ay[i] >> Axf[i] >> Ayf[i]; for(int i=0; i < D; i++) fin >> Dx[i] >> Dy[i] >> Dxf[i] >> Dyf[i]; float Amin=100; for(int i=0; i < A; i++) { float pos=(Ayf[i]-Ay[i])*d/10+Ay[i]; if(pos < Amin) Amin=pos; } float Dmin=100; for(int i=0; i < D; i++) { float pos=(Dyf[i]-Dy[i])*d/10+Dy[i]; if(pos < Dmin) Dmin=pos; } char risposta=(Amin < Dmin) ? 'F' : 'R'; fout << risposta; return 0; }