Загальні поради:
- Давайте змінним людські назви; звісно, в умові a,b,c,d, але s_min, s_max, p_min, p_max значно легше сприймати.
- Вирівнюйте код. if k1<=g у вас поза функцією блоком begin-end? А другий end; - він до якого begin? Чому треба читати весь код, щоб зрозуміти, де закінчується блок? Структурне програмування придумали для того, щоб не треба було лізти в непотрібні деталі. Ви самі себе (і нас теж) відволікаєте від задачі.
- Складні порівняння ліпше записувати через < та <=.
читається краще, ніж у вас.
Тепер - по задачі. Я виходитму з того, що код не проходить через часові обмеження (а це не факт, треба дивитися, але ваш код просто неможливо читати). Ви не підтвердили, що питання про цілі значення сторін; поки що припущу, що це саме так. Якщо ви візьмете по вісі x один бік, а по вісі y - другий, то в кожній точці можна буде встановити площу, а лінії, утворені прямокутниками з рівною площею, утворюватимуть криві xy=c, тобто гіперболи. Вам треба полічити цілі точки між гіперболами xy=c та xy=d та прямими x+y=a/2, x+y=b/2. Якщо важко це уявити - візьміть таблицю Піфагора і проведіть лінії, не знаю, xy=40 та xy=60.