P1696 [USACO18JAN] Blocked Billboard II B 题解
一眼,暴力。
坐标范围挺小,可以直接暴力求解,把割草机广告坐标全染色为
然后暴力寻找未被盖到的坐标的最大最小值。
最后直接用暴力求到的左上角和右下角两个点的坐标计算面积即可。
贴个部分代码:
const int N = 2e3 + 10, INF = 1e9;
int s[2][4];
int g[N][N];
//初始化,最小值初始化为正无穷,最大值初始化为负无穷
int x1 = INF, y1 = INF, x2 = -INF, y2 = -INF;
int main(){
for (int i = 0; i < 2; i++) for (int j = 0; j < 4; j++) cin >> s[i][j];
for (int k = 0; k < 2; k++){
for (int i = s[k][0]; i < s[k][2]; i++){
for (int j = s[k][1]; j < s[k][3]; j++){
g[i][j] = k + 1;//把割草机广告坐标全染色为 1,饲料广告染色为 2
}
}
}
//寻找未被盖到的坐标的最大最小值
for (int i = s[0][0]; i < s[0][2]; i++){
for (int j = s[0][1]; j < s[0][3]; j++){
if (g[i][j] == 1){
x1 = min(x1, i);
x2 = max(x2, i);
y1 = min(y1, j);
y2 = max(y2, j);
}
}
}
//计算面积
if (x2 >= x1 && y2 >= y1) cout << (x2 - x1 + 1) * (y2 - y1 + 1);
else cout << 0;
RE 撒花!
那究竟是为什么 RE 呢?发现在用到的数组下标
这样 AC 代码就很简单了,请读者自行在原 RE 的代码上改改,思考思考。(好像都不用思考耶)