-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpoj1083.cpp
91 lines (78 loc) · 1.97 KB
/
poj1083.cpp
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
enum DIRECTION {START, END};
typedef struct _MOVE {
int s;
int t;
} MOVE;
typedef struct _POINT {
int n;
DIRECTION d;
} POINT;
typedef struct _CASE {
int n;
MOVE moves[200];
} CASE;
bool cmp(POINT a, POINT b)
{
return a.n <= b.n;
}
int main()
{
int cases;
vector<CASE> casev;
vector<CASE>::iterator casei;
vector<MOVE>::iterator movei;
CASE caase;
cin >> cases;
while (cases > 0) {
int i;
cin >> caase.n;
for (i = 0; i < caase.n; i++) {
caase.moves[i].s = 0;
caase.moves[i].t = 0;
}
for (i = 0; i < caase.n; i++) {
cin >> caase.moves[i].s >> caase.moves[i].t;
if (caase.moves[i].s > caase.moves[i].t) {
int temp = caase.moves[i].s;
caase.moves[i].s = caase.moves[i].t;
caase.moves[i].t = temp;
}
caase.moves[i].s = (caase.moves[i].s + 1) >> 1;
caase.moves[i].t = (caase.moves[i].t + 1) >> 1;
}
casev.push_back(caase);
cases--;
};
for (casei = casev.begin(); casei != casev.end(); casei++) {
caase = *casei;
int i = 0;
int j = 0;
POINT points[caase.n * 2];
for (i = 0; i < caase.n; i++) {
points[2 * i].n = caase.moves[i].s;
points[2 * i].d = START;
points[2 * i + 1].n = caase.moves[i].t;
points[2 * i + 1].d = END;
}
sort(points, points + i * 2, cmp);
int max = 0;
int overlap = 0;
for (j = 0; j < 2 * i; j++) {
if (points[j].d == START) {
overlap++;
if (max < overlap) {
max = overlap;
}
}
else if (points[j].d == END) {
overlap--;
}
}
cout << 10 * max << endl;
}
return 0;
}