Theatre Square
Theatre Square
مطلوب منا تغطية شبكة أبعادها \(N \times M\) باستخدام بلاطات أبعادها \(A \times A\). يُسمح للبلاطات بأن تتجاوز حدود الشبكة، ولكن يجب أن تغطيها بالكامل.
Solution
عند حساب عدد البلاطات اللازمة لتغطية البعد العمودي للشبكة، نجد أنه يساوي \(\lceil \frac{N}{A} \rceil\)، وبالمثل، فإن عدد البلاطات اللازمة لتغطية البعد الأفقي يساوي \(\lceil \frac{M}{A} \rceil\).
وبالتالي، فإن العدد الإجمالي للبلاطات اللازمة لتغطية الشبكة كاملة هو: \(\lceil \frac{N}{A} \rceil \times \lceil \frac{M}{A} \rceil\).
Tipالتقريب إلى الأعلى في القسمة الصحيحة
يُرمز إليه بـ \(\lceil \frac{A}{B} \rceil\)
ويُكتب في لغة ++C على النحو التالي: (A + B - 1) / B
#include<iostream>
using namespace std;
int main () {
int n, m, a;
cin >> n >> m >> a;
long long v = (n + a - 1) / a;
long long h = (m + a - 1) / a;
cout << v * h;
}
Cautionتجاوز السعة (Overflow)
إذا كانت قيم \(N, M = 10^9\) و \(A = 1\)، فستكون النتيجة \(N \times M = 10^{18}\). المتغير من نوع int سيتجاوز سعته، لذلك نحتاج إلى استخدام النوع long long.