lunedì 31 marzo 2014

[C++] Gara di informatica

Ogni anno l'università organizza una competizione a squadre di informatica. Ogni squadra
è composta da tre studenti.
Tradizionalmente le migliori sono sempre state le ragazze, che quindi partecipavano in
sovrannumero rispetto al numero di ragazzi a questa competizione. Quest'anno i ragazzi con le loro
proteste hanno fatto approvare una regola: ogni squadra deve essere composta da esattamente 1
ragazzo e 2 ragazze.
Per rendere l'organizzazione della competizione ancora più difficile, il preside della scuola ha
deciso che dovranno essere mandati K dei ragazzi (maschi o femmine) che si erano iscritti alla gara
in uno stage all'estero. Questi K ragazzi non potranno ovviamente fare parte di nessuna squadra,
non potendo partecipare alla gara.
Definito come M il numero di ragazze iscritte alla gara, con N il numero di ragazzi (maschi) iscritti
alla gara e con K il numero di ragazzi (maschi o femmine) che, scelti tra gli N + M ragazzi iscritti
alla gara, dovranno essere mandati allo stage all'estero, si determini qual è il massimo numero di
squadre che si possono iscrivere alla gara.
Per esempio se M è 6, N è 3 e K è 2, il preside può mandare una ragazza e un ragazzo (maschio)
allo stage, così rimangono 5 ragazze e 2 ragazzi. Allora si potranno iscrivere alla gara due squadre
(e una ragazza sarà lasciata senza squadra).

INPUT (input.txt)
La prima e unica riga dell'input contiene tre numeri, separati da uno spazio: M ( 0 <= M <= 100), il
numero di ragazze, N (0 <= N <= 100), il numero di ragazzi e K (0 <= K <= M+N), il numero di
iscritti alla gara che devono essere mandati in uno stage.

OUTPUT (output.txt)
L'output dovrà contenere un solo numero: il numero massimo di squadre che possono essere
composte.

input.txt   input.txt   input.txt
6 3 2         2 1 1        6 10 3
output.txt   output.txt   output.txt
2                  0                3

Semplicemente dividendo il numero di ragazze a metà, la differenza fra ragazze/2 e ragazzi saranno gli alunni partecipanti allo stage, coi rimanenti si formano le squadre:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

int main(){
    ifstream in ("input.txt");
    ofstream out ("output.txt");
   
   int m,n,k,diff;
   
   in>>m>>n>>k;
   
   diff= m- 2*n;
   
   if (diff >0){
   k -= diff;
   if (k<0){diff+=k;k=0;}
   m-=diff;}else{
   k += diff;
   if (k<0){diff-=k;k=0;}
   n += diff;}
   
   diff = k/3;
   k -= 3*diff;
   if (k<0){diff+=k;k=0;}
   m -= 2*diff;
   n -= diff;
      
if (k>0)
if (2*n > m)
n-=k;
else
m-=k;

out << min(n,m/2);
    
    return 0;}

Nessun commento:

Posta un commento

Si prega di non commentare in modo volgare e/o offensivo.