Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
#include <stdio.h> //#include <conio.h> long wys,szer,pom1,pom2,wielkosci[31],ile_wielkosci,SUM_OBRAZOW,nr_obr; long ILE_OBRAZOW(long sz,long ww) { long ppp; if (ww>sz) {ppp=sz; sz=ww; ww=ppp;} //printf("Obliczenia dla pola %ld x %ld\n",sz,ww); if (ww==0) return 0; // Szukam najwi�kszego obrazu mieszcz�cego si� w zadanym fragmencie ppp = ile_wielkosci; while (wielkosci[ppp]>ww) ppp--; // Je�li najwi�kszym kwadratem jest ten najmniejszy (o wymiarze 1x1), to ten fragment b�dzie z�o�ony tylko z najmniejszych //printf("Obecnie najwiekszy obraz to: %ld\n",wielkosci[ppp]); if (ppp==1) { // printf("Tylko najmniejszy, wiec zwraca %ld x %ld = %ld\n",sz,ww,sz*ww); return sz*ww; } // Pasek jest na szeroko�� jednego obrazu ... i na ca�� wysoko�� // Takich pask�w mo�e by� maksymalnie... sz/wielkosci[ppp] // No i do tego trzeba doda� to, co zosta�o - wysoko�� ta sama, a szeroko��... To reszta z dzielenia sz/wielkosci[ppp] //printf("Jest zadanie, ze ILE(%ld,%ld) * %ld ...\n",wielkosci[ppp],ww,long(sz/wielkosci[ppp])); //printf("A do tego resztka: ILE(%ld,%ld) .\n",sz%wielkosci[ppp],ww); //getch(); if (wielkosci[ppp]==ww) return long(sz/wielkosci[ppp]) + ILE_OBRAZOW(sz%wielkosci[ppp],ww); else return ILE_OBRAZOW(wielkosci[ppp],ww) * long(sz/wielkosci[ppp]) + ILE_OBRAZOW(sz%wielkosci[ppp],ww); } int main() { scanf("%ld",&pom1); scanf("%ld",&pom2); if (pom1>pom2) { szer=pom1; wys=pom2; } else { szer=pom2; wys=pom1; } scanf("%ld",&ile_wielkosci); for (int ii=1; ii<=ile_wielkosci; ii++) scanf("%ld",&wielkosci[ii]); // Na szybko sprawdzam, czy s� podzielne - je�li nie, to nie ma co liczy�. Je�li tak, to mo�na przedzieli� ca�e zadanie. if ((szer % wielkosci[1] == 0) && (wys % wielkosci[1] == 0)) { // Mo�na przeskalowa� zadanie szer /= wielkosci[1]; wys /= wielkosci[1]; for (int ii=ile_wielkosci; ii>=1; ii--) wielkosci[ii] /= wielkosci[1]; } else { // Nie ma co liczy� printf("-1"); return 0; } // Obraz mo�e by� wi�kszy od �ciany... Dobrze takie od razu odrzuci�. for (int ii=ile_wielkosci; ii>=1; ii--) if (wielkosci[ii] > wys) ile_wielkosci=ii-1; //printf("Sciana %ld x %ld\n", szer, wys); //printf("Obrazy: "); //for (int ii=1; ii<=ile_wielkosci; ii++) printf("%ld ",wielkosci[ii]); //printf("\n"); // I teraz po kolei staram si� "z�o�y�" jak najszersze, pionowe paski, czyli w sumie mo�na forem, od najwi�kszego do najmniejszego obrazu. // Pasek b�dzie dok�adnie o szeroko�ci obecnie rozpatrywanego obrazu. // No i ile obraz�w mie�ci si� w takim pasku??? // Najch�tniej u�y�bym rekurencji... Ale jednak pozostan� przy standardowym podej�ciu - d�u�ej, ale pewniej :) SUM_OBRAZOW = ILE_OBRAZOW(szer,wys); /* for (nr_obr=ile_wielkosci; nr_obr>=1; nr_obr--) { if (wys>szer) { pom1=wys; wys=szer; szer=pom1; } if (wielkosci[nr_obr] > wys) continue; } */ if (SUM_OBRAZOW==0) printf("-1"); else printf("%ld",SUM_OBRAZOW); // WSZYSTKIE OBRAZY MOG� BY� ZA DU�E !!!! ... Ale to si� wy�apie na etapie sprawdzania podzielno�ci :) return 0; }
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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <stdio.h> //#include <conio.h> long wys,szer,pom1,pom2,wielkosci[31],ile_wielkosci,SUM_OBRAZOW,nr_obr; long ILE_OBRAZOW(long sz,long ww) { long ppp; if (ww>sz) {ppp=sz; sz=ww; ww=ppp;} //printf("Obliczenia dla pola %ld x %ld\n",sz,ww); if (ww==0) return 0; // Szukam najwi�kszego obrazu mieszcz�cego si� w zadanym fragmencie ppp = ile_wielkosci; while (wielkosci[ppp]>ww) ppp--; // Je�li najwi�kszym kwadratem jest ten najmniejszy (o wymiarze 1x1), to ten fragment b�dzie z�o�ony tylko z najmniejszych //printf("Obecnie najwiekszy obraz to: %ld\n",wielkosci[ppp]); if (ppp==1) { // printf("Tylko najmniejszy, wiec zwraca %ld x %ld = %ld\n",sz,ww,sz*ww); return sz*ww; } // Pasek jest na szeroko�� jednego obrazu ... i na ca�� wysoko�� // Takich pask�w mo�e by� maksymalnie... sz/wielkosci[ppp] // No i do tego trzeba doda� to, co zosta�o - wysoko�� ta sama, a szeroko��... To reszta z dzielenia sz/wielkosci[ppp] //printf("Jest zadanie, ze ILE(%ld,%ld) * %ld ...\n",wielkosci[ppp],ww,long(sz/wielkosci[ppp])); //printf("A do tego resztka: ILE(%ld,%ld) .\n",sz%wielkosci[ppp],ww); //getch(); if (wielkosci[ppp]==ww) return long(sz/wielkosci[ppp]) + ILE_OBRAZOW(sz%wielkosci[ppp],ww); else return ILE_OBRAZOW(wielkosci[ppp],ww) * long(sz/wielkosci[ppp]) + ILE_OBRAZOW(sz%wielkosci[ppp],ww); } int main() { scanf("%ld",&pom1); scanf("%ld",&pom2); if (pom1>pom2) { szer=pom1; wys=pom2; } else { szer=pom2; wys=pom1; } scanf("%ld",&ile_wielkosci); for (int ii=1; ii<=ile_wielkosci; ii++) scanf("%ld",&wielkosci[ii]); // Na szybko sprawdzam, czy s� podzielne - je�li nie, to nie ma co liczy�. Je�li tak, to mo�na przedzieli� ca�e zadanie. if ((szer % wielkosci[1] == 0) && (wys % wielkosci[1] == 0)) { // Mo�na przeskalowa� zadanie szer /= wielkosci[1]; wys /= wielkosci[1]; for (int ii=ile_wielkosci; ii>=1; ii--) wielkosci[ii] /= wielkosci[1]; } else { // Nie ma co liczy� printf("-1"); return 0; } // Obraz mo�e by� wi�kszy od �ciany... Dobrze takie od razu odrzuci�. for (int ii=ile_wielkosci; ii>=1; ii--) if (wielkosci[ii] > wys) ile_wielkosci=ii-1; //printf("Sciana %ld x %ld\n", szer, wys); //printf("Obrazy: "); //for (int ii=1; ii<=ile_wielkosci; ii++) printf("%ld ",wielkosci[ii]); //printf("\n"); // I teraz po kolei staram si� "z�o�y�" jak najszersze, pionowe paski, czyli w sumie mo�na forem, od najwi�kszego do najmniejszego obrazu. // Pasek b�dzie dok�adnie o szeroko�ci obecnie rozpatrywanego obrazu. // No i ile obraz�w mie�ci si� w takim pasku??? // Najch�tniej u�y�bym rekurencji... Ale jednak pozostan� przy standardowym podej�ciu - d�u�ej, ale pewniej :) SUM_OBRAZOW = ILE_OBRAZOW(szer,wys); /* for (nr_obr=ile_wielkosci; nr_obr>=1; nr_obr--) { if (wys>szer) { pom1=wys; wys=szer; szer=pom1; } if (wielkosci[nr_obr] > wys) continue; } */ if (SUM_OBRAZOW==0) printf("-1"); else printf("%ld",SUM_OBRAZOW); // WSZYSTKIE OBRAZY MOG� BY� ZA DU�E !!!! ... Ale to si� wy�apie na etapie sprawdzania podzielno�ci :) return 0; } |