60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
#include <iostream>
|
|
#include <algorithm>
|
|
#include <set>
|
|
|
|
using namespace std;
|
|
|
|
struct Line
|
|
{
|
|
int x1,y1,x2,y2;
|
|
|
|
friend istream &operator>>( istream &input, Line &l ) {
|
|
input >> l.x1 >> l.y1 >> l.x2 >> l.y2;
|
|
return input;
|
|
}
|
|
};
|
|
|
|
inline constexpr int num_lines{500};
|
|
inline constexpr int grid_size{1000};
|
|
|
|
int main()
|
|
{
|
|
int grid[grid_size*grid_size] = {0};
|
|
Line line;
|
|
set<int> dangerous_locations;
|
|
|
|
for(int i = 0; i < num_lines; i++)
|
|
{
|
|
cin >> line;
|
|
|
|
if (line.x1 == line.x2)
|
|
{
|
|
for(int y = min(line.y1, line.y2); y <= max(line.y1, line.y2); y++)
|
|
{
|
|
grid[line.x1 + grid_size*y]++;
|
|
|
|
if (grid[line.x1+y*grid_size] >= 2)
|
|
{
|
|
dangerous_locations.insert(line.x1+y*grid_size);
|
|
}
|
|
}
|
|
}
|
|
else if (line.y1 == line.y2)
|
|
{
|
|
for(int x = min(line.x1, line.x2); x <= max(line.x1, line.x2); x++)
|
|
{
|
|
grid[x + line.y1*grid_size]++;
|
|
|
|
if (grid[x+line.y1*grid_size] >= 2)
|
|
{
|
|
dangerous_locations.insert(x+line.y1*grid_size);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
cout << dangerous_locations.size() << endl;
|
|
|
|
return 0;
|
|
}
|