-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmeetingroon.cpp
More file actions
74 lines (61 loc) · 1.27 KB
/
Copy pathmeetingroon.cpp
File metadata and controls
74 lines (61 loc) · 1.27 KB
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
71
72
73
74
#include <iostream>
#include <vector>
#include <map>
using namespace std;
struct Mtg;
bool compare(const Mtg &r, const Mtg &l);
struct Mtg
{
Mtg(int _start, int _end)
: start(_start)
, end(_end)
{
}
int start;
int end;
bool operator< (const Mtg& l) const
{
return compare(*this, l);
}
};
bool overlap(const Mtg& r, const Mtg& l)
{
if (r.start <= l.start && r.end <= l.start)
return false;
if (r.start >= l.start && r.end >= l.start)
return false;
return true;
}
bool compare(const Mtg &r, const Mtg &l)
{
if (overlap(r,l))
return false;
if (r.start != l.start)
return r.start < l.start;
return r.end < l.start;
}
typedef vector<Mtg> Mtgs;
typedef map<Mtg, Mtgs> Eq;
Eq eq;
int main(int argc, char*argv[])
{
int n;
cin >> n;
// vector<Mtg> mtgs;
for (int i = 0; i < n; ++i)
{
int start, end;
cin >> start >> end;
Mtg meeting(start,end);
vector<Mtg>& vm = eq[meeting];
vm.push_back(meeting);
}
cout << n;
for (const auto&kv: eq)
{
cout << "\noverlapping " << kv.second.size() << ":";
for (const auto&m: kv.second)
cout << m.start << "," << m.end << "|";
}
return 0;
}