Jest to fragment rozwiązania zadania z olimpiady informatycznej.
Cała treść zadania wraz z przykładowym rozwiązaniem znajduje się pod tym linkiem - http://kondel.ko.funpic.de/?pid=38
Natomiast poniżej podaję dalszą część programu:
/******************************/
/* Autor: Konrad Ortyl */
/* http://www.kondel.prv.pl */
/******************************/
#include <iostream.h>
#include <stdio.h>
int m,n,i,a,b,a1,b1,suma=0,wynik=0; /*zmienne*/
int *x,*y; /*tablice*/
int main(void)
{
cin >> m >> n; /*wczytanie m,n*/
x= new int [m]; /*inicjalizacja tablicy x*/
y= new int [n]; /*inicjalizacja tablicy y*/
x[m-1]=0; y[n-1]=0; /*ostatnim elementom wartosc na 0*/
for (i=0;i<m-1;i++) scanf("%d", &x[i]); /*wczytanie x1,x2,...,xm-1*/
for (i=0;i<n-1;i++) scanf("%d", &y[i]); /*wczytanie x1,x2,...,xn-1*/
/*sortowanie tablic*/
for (i=0;i<m-2;i++)
{
for (a=i+1;a<m-1;a++)
{
if (x[i]<x[a])
{
b=x[a];
x[a]=x[i];
x[i]=b;
};
};
};
for (i=0;i<n-2;i++)
{
for (a=i+1;a<n-1;a++)
{
if (y[i]<y[a])
{
b=y[a];
y[a]=y[i];
y[i]=b;
};
};
};
/*liczenie*/
a=1; b=1; /*liczba kawalkow pionowych i poziomych*/
a1=0; b1=0;
for (i=0;i<m+n-2;i++)
{
if (x[a1]>=y[b1]) {suma=x[a1]*b; a1++; a++; wynik+=suma; continue;};
if (x[a1]< y[b1]) {suma=y[b1]*a; b1++; b++; wynik+=suma; continue;};
};
cout << wynik;
delete [] x;
delete [] y;
return 0;
};