洛谷-P2956 [USACO09OCT]The Robot Plow G
阿新 • • 發佈:2020-08-09
洛谷-P2956 [USACO09OCT]The Robot Plow G
題目描述
Farmer John為了讓自己從無窮無盡的犁田工作中解放出來,於是買了個新機器人幫助他犁田。這個機器人可以完成犁田的任務,可惜有一個小小的缺點:這個犁田機器人一次只能犁一個邊的長度是整數的長方形的田地。
因為FJ的田地有樹和其它障礙物,所以FJ設定機器人去犁很多不同的長方形。這些長方形允許重疊。他給機器人下了P個指令,每個指令包含一個要犁長方形的地。這片田地由長方形的左下角和右上角座標決定。他很好奇最後到底有多少個方格的地被犁過了。
一般來說,田地被分割為很多小方格。這些方格的邊和x軸或y軸平行。田地的寬度為X個方格,高度為Y個方格 (1 <= X <= 240; 1 <= Y <= 240). FJ執行了I (1 <= I <= 200)個指令,每個指令包含4個整數:Xll, Yll, Xur, Yur (1 <= Xll <= Xur; Xll <= Xur <=X; 1 <= Yll <= Yur; Yll <= Yur <= Y), 分別是要犁的長方形的左下角座標和右上角座標。機器人會犁所有的橫座標在Xll..Xur並且縱座標在Yll..Yur範圍內的所有方格的地。可能這個長方形會比你想象的多一行一列(就是說從第Xll列到第Xur列一共有Xur - Xll + 1列而不是Xur - Xll列)。
考慮一個6方格寬4方格高的田地。FJ進行了2個操作(如下),田地就被犁成"*"和"#"了。雖然一般被犁過的地看起來都是一樣的。但是標成"#"可以更清晰地看出最近一次被犁的長方形。
...... **.... #####. ...... (1,1)(2,4) **.... (1,3)(5,4) #####. ...... **.... **.... ...... **.... **....
一共14個方格的地被犁過了。
輸入格式
- 第1行:三個以空格分隔的整數:X,Y和I
- 第2..I + 1行:第i + 1行包含耕作指令i,該指令由四個整數描述:Xll,Yll,Xur和Yur
輸出格式
- 第1行:一個整數,代表所耕制的正方形總數
輸入輸出樣例
輸入 #1
6 4 2
1 1 2 4
1 3 5 4
輸出 #1
14
說明/提示
As in the task's example.
C++程式碼
#include <iostream>
using namespace std;
int a[250][250];
int main() {
int x, y, t, ans=0;
cin >> x >> y >> t;
int xi[t], yi[t], xu[t], yu[t];
for (int i=0; i<t; ++i)
cin >> xi[i] >> yi[i] >> xu[i] >> yu[i];
for (int i=0; i<t; ++i)
for (int j=xi[i]; j<=xu[i]; ++j)
for (int k=yi[i]; k<=yu[i]; ++k)
a[y-k+1][j] = 1;
for (int i=1; i<=y; ++i)
for (int j=1; j<=x; ++j)
if (a[i][j] == 1)
++ans;
cout << ans << endl;
return 0;
}