Fuorigioco

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.

fuorigioco

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.

fuorigioco

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
*/

#include

float 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;
}