/* P-I-1 Pizza kolem * Jakub Ruzicka * ctete pizza.txt */#include <iostream>#include <fstream>using namespace std;int main ( int argc, char *argv[] ){// vstupni a vystupni soubory...ifstream vstup("pizza.in");ofstream vystup("pizza.out");// nacteni poctu objednavek, jak jinak...int pocet;if(!(vstup >> pocet)) { cerr << "Chyba na vstupu (pocet objednavek)\n"; exit(EXIT_FAILURE); }// mocne pole, ktere obsahuje pocet kousku danne velikosti v sestinach - 0 je// pochopitelne pocet celych pizz.int dilky[6] = {0,0,0,0,0,0};// nacteni jednotlivych casti pizzy... celky budou nemilosrdne osekany.for(int a=0;a<pocet;a++) { int dilek; if(!((vstup >> dilek) && (dilek > 0)) ){ cerr << "Chyba na vstupu (objednavka c." << (a+1) << ")\n"; exit(EXIT_FAILURE); } dilky[0] += dilek/6; if(dilek%6) dilky[dilek%6]++; }// mame nacteno, hura na spojeni 1+5, 2+4 a 3+3 sestin...// kvuli dvema vyskytum psat fci je zbytecne, jde nam prece o rychlost.while(dilky[1] && dilky[5]) { // 1+5=6 dilky[1]--; dilky[5]--; dilky[0]++; }while(dilky[2] && dilky[4]) { // 2+4=6 dilky[2]--; dilky[4]--; dilky[0]++; }while(dilky[3]>=2) { dilky[3]-=2; dilky[0]++; }// nic na svete neni dokonale, takze nam zrejme nejake nezbedne dilky zbyly... takze// pujdeme od nejmensich a pokusime se k nim pridavat od nejvetsich tak, aby byly// vytvoreny co nejvetsi celky a Marco se neprejedl zbytky...for(int a=1;a<=5;a++) while(dilky[a]) { int d; for(d=6-a;(!dilky[d] && (d >= 1));d--) {}; d++; if(!dilky[d]) { // nenasli jsme dalsi vhodny dilek - neco holt zbyde... dilky[a]--; dilky[0]++; } else { // secteme nalezene dilky dilky[a]--; dilky[d]--; dilky[a+d]++; } }// pokud vse slo dobre (samozrejme ze slo), v poli dilky je na pozici 0 pocet// potrebnych pizz. Tak ho zapisme/ukazme !vystup << dilky[0] << endl;vystup.close(); vstup.close();return EXIT_SUCCESS;}