-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cc
70 lines (67 loc) · 1.86 KB
/
main.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <vector>
#include <iostream>
#include "map.hh"
#include "write.hh"
void find_ride(Map& map, Vehicle& vehicle, int step)
{
for (size_t i = 0; i < map.rides_vector.size(); ++i)
{
if (!map.rides_vector[i].taken
&& map.rides_vector[i].start_coord[0] - vehicle.x
+ map.rides_vector[i].start_coord[1] - vehicle.y
< map.rides_vector[i].earliest_start - step)
{
vehicle.current_ride = i;
map.rides_vector[i].taken = true;
if (map.rides_vector[vehicle.current_ride].start_coord[0] == vehicle.x
&& map.rides_vector[vehicle.current_ride].start_coord[1] == vehicle.y)
vehicle.was_at_begin = true;
}
}
}
bool move_to(Map& map, Vehicle& vehicle, std::vector<int>& pos)
{
if (pos[0] != vehicle.x)
vehicle.x += pos[0] > vehicle.x ? 1 : -1;
if (pos[1] != vehicle.y)
vehicle.y += pos[1] > vehicle.y ? 1 : -1;
if (pos[0] == vehicle.x && pos[1] == vehicle.y)
return true;
return false;
}
int main()
{
Map map = parser();
std::vector<Vehicle> vehicles;
size_t sizeve = map.vehicules;
for (size_t j = 0; j < sizeve; ++j)
{
vehicles.push_back(Vehicle());
find_ride(map, vehicles[j], 0);
}
for (int i = 0; i < map.steps; ++i)
{
std::cout << i << "/" << map.steps << std::endl;
for (size_t j = 0; j < sizeve; ++j)
{
if (vehicles[j].current_ride == -1)
continue;
if (!vehicles[j].was_at_begin)
{
if (move_to(map, vehicles[j], map.rides_vector[vehicles[j].current_ride].start_coord))
vehicles[j].was_at_begin = true;
}
else
{
if (move_to(map, vehicles[j], map.rides_vector[vehicles[j].current_ride].end_coord))
{
find_ride(map, vehicles[j], i);
vehicles[j].done_rides.push(vehicles[j].current_ride);
}
}
}
}
Write w = Write(vehicles);
w.compute_res();
return 0;
}