📄 3960388_wa.cpp
字号:
#include <stdio.h>
#include <vector>
#include <string.h>
#include <algorithm>
using namespace std;
struct circle
{
int x, y, r;
bool operator < (const circle c) const
{
return this->r < c.r;
}
circle(int x, int y, int r)
{
this->x = x;
this->y = y;
this->r = r;
}
circle() {}
}c[100];
int max(int a, int b)
{
return a < b ? b : a;
}
int min(int a, int b)
{
return a < b ? a : b;
}
int main()
{
int x, y, r;
int w, h, n;
int i, j;
scanf("%d%d%d", &w, &h, &n);
for (i = 0; i < n; i++)
{
scanf("%d%d%d", &x, &y, &r);
c[i] = circle(x, y, r);
}
sort(c, c + n);
int mark[100];
memset(mark, 0, sizeof(mark));
int ans = w * h;
for (i = 0; i < n; i++)
{
if (mark[i] == 1)
{
continue;
}
int lx, rx, uy, dy;
int xl, xr, yu, yd;
lx = c[i].x - c[i].r;rx = c[i].x + c[i].r;
uy = c[i].y + c[i].r;dy = c[i].y - c[i].r;
for (j = i + 1; j < n; j++)
{
if (mark[j] == 1)
{
continue;
}
xl = c[j].x - c[j].r;xr = c[j].x + c[j].r;
yd = c[j].y - c[j].r;yu = c[j].y + c[j].r;
if (xl == lx && xr == rx && yu == uy && yd == dy)
{
mark[j] = 1;
continue;
}
if ((lx <= xl && xl <= rx && dy <= yd && yd <= uy) ||
(lx <= xr && xr <= rx && dy <= yd && yd <= uy) ||
(lx <= xl && xl <= rx && dy <= yu && yu <= uy) ||
(lx <= xr && xr <= rx && dy <= yu && yu <= uy) )
{
mark[j] = 1;
lx = min(lx, xl);rx = max(rx, xr);
uy = max(uy, yu);dy = min(dy, yd);
}
}
ans -= (uy - dy) * (rx - lx);
}
printf("%d\n", ans);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -