/* P-I-1 Pizza kolem * Jakub Ruzicka * ctete pizza.txt */ #include #include 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> 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; }