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