Skip to content

Commit 770e2be

Browse files
committed
Samsung
1 parent a2edfd2 commit 770e2be

File tree

5 files changed

+331
-0
lines changed

5 files changed

+331
-0
lines changed

Train Samsung/.vscode/settings.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"C_Cpp.errorSquiggles": "disabled",
3+
"files.associations": {
4+
"*.embeddedhtml": "html",
5+
"iostream": "cpp"
6+
}
7+
}
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
#include <iostream>
2+
3+
using namespace std;
4+
5+
int t, n;
6+
int ans = (int)1e9;
7+
8+
const int MN = 60;
9+
const int MP = 3;
10+
int vis[MN], per[MN];
11+
int p[MN], c[MN];
12+
int mark_sat[MN];
13+
14+
bool is_valid(int num) {
15+
return 1 <= num && num <= n;
16+
}
17+
18+
void sort_per(int i, int cost) {
19+
if (cost > ans) {
20+
return;
21+
}
22+
23+
if (i == MP) {
24+
ans = min(ans, cost);
25+
return;
26+
}
27+
28+
int num_person = c[per[i]];
29+
int idx_person = p[per[i]];
30+
int k = 1;
31+
int sum = 0;
32+
33+
if (mark_sat[idx_person] == 0) {
34+
mark_sat[idx_person] = i + 1;
35+
sum += 1;
36+
num_person--;
37+
}
38+
39+
while (num_person > 0) {
40+
int left = idx_person - k;
41+
int right = idx_person + k;
42+
if (num_person == 1 && is_valid(left) && is_valid(right) && !mark_sat[left] && !mark_sat[right]) {
43+
num_person--;
44+
mark_sat[left] = i + 1;
45+
sum += 1 + k;
46+
sort_per(i + 1, cost + sum);
47+
sum -= 1 + k;
48+
num_person++;
49+
mark_sat[left] = 0;
50+
51+
for (int j = 1; j <= n; ++j) {
52+
if (i + 1 < mark_sat[j]) {
53+
mark_sat[j] = 0;
54+
}
55+
}
56+
57+
num_person--;
58+
mark_sat[right] = i + 1;
59+
sum += 1 + k;
60+
sort_per(i + 1, cost + sum);
61+
sum -= 1 + k;
62+
num_person++;
63+
mark_sat[right] = 0;
64+
65+
for (int j = 1; j <= n; ++j) {
66+
if (i + 1 < mark_sat[j]) {
67+
mark_sat[j] = 0;
68+
}
69+
}
70+
return;
71+
}
72+
73+
if (num_person > 0 && is_valid(left) && !mark_sat[left]) {
74+
num_person--;
75+
mark_sat[left] = i + 1;
76+
sum += 1 + k;
77+
}
78+
79+
if (num_person > 0 && is_valid(right) && !mark_sat[right]) {
80+
num_person--;
81+
mark_sat[right] = i + 1;
82+
sum += 1 + k;
83+
}
84+
85+
k++;
86+
}
87+
88+
sort_per(i + 1, cost + sum);
89+
}
90+
91+
void permutation(int i) {
92+
if (i == MP) {
93+
for (int j = 1; j <= n; ++j) {
94+
mark_sat[j] = 0;
95+
}
96+
sort_per(0, 0);
97+
return;
98+
}
99+
for (int j = 0; j < MP; ++j) {
100+
if (!vis[j]) {
101+
vis[j] = 1;
102+
per[i] = j;
103+
permutation(i + 1);
104+
vis[j] = 0;
105+
}
106+
}
107+
}
108+
109+
int main() {
110+
// freopen("hugo_di_tau.txt", "r", stdin);
111+
cin >> t;
112+
for (int test_case = 1; test_case <= t; ++test_case) {
113+
cin >> n;
114+
for (int i = 0; i < MP; ++i) {
115+
cin >> p[i] >> c[i];
116+
}
117+
ans = (int)1e9;
118+
permutation(0);
119+
cout << "Case #" << test_case << '\n';
120+
cout << ans << '\n';
121+
}
122+
return 0;
123+
}
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
50
2+
10
3+
4 5
4+
6 2
5+
10 2
6+
10
7+
8 5
8+
9 1
9+
10 2
10+
24
11+
15 3
12+
20 4
13+
23 7
14+
39
15+
17 8
16+
30 5
17+
31 9
18+
60
19+
57 12
20+
31 19
21+
38 16
22+
10
23+
2 2
24+
8 3
25+
5 2
26+
10
27+
9 3
28+
3 3
29+
5 2
30+
10
31+
8 8
32+
2 1
33+
6 1
34+
10
35+
2 2
36+
5 2
37+
3 2
38+
10
39+
2 2
40+
5 2
41+
4 2
42+
20
43+
12 5
44+
19 6
45+
10 2
46+
20
47+
16 4
48+
15 3
49+
4 4
50+
20
51+
14 2
52+
5 6
53+
2 5
54+
20
55+
8 4
56+
5 4
57+
3 2
58+
20
59+
4 5
60+
2 5
61+
10 6
62+
20
63+
11 5
64+
3 5
65+
9 3
66+
20
67+
5 4
68+
9 3
69+
7 4
70+
20
71+
11 4
72+
7 3
73+
2 4
74+
20
75+
4 1
76+
5 3
77+
15 5
78+
20
79+
17 1
80+
12 4
81+
9 3
82+
30
83+
14 9
84+
18 3
85+
29 10
86+
30
87+
12 10
88+
4 9
89+
6 5
90+
30
91+
1 4
92+
28 7
93+
27 2
94+
30
95+
6 1
96+
15 10
97+
23 8
98+
30
99+
4 7
100+
28 1
101+
13 2
102+
30
103+
7 6
104+
6 5
105+
18 2
106+
30
107+
23 2
108+
21 5
109+
11 7
110+
30
111+
11 8
112+
28 8
113+
12 8
114+
30
115+
18 10
116+
4 10
117+
6 9
118+
30
119+
12 7
120+
19 7
121+
3 1
122+
40
123+
14 1
124+
9 4
125+
21 5
126+
40
127+
11 11
128+
40 8
129+
25 10
130+
40
131+
36 11
132+
2 12
133+
3 17
134+
40
135+
15 2
136+
21 9
137+
37 20
138+
40
139+
29 3
140+
5 2
141+
2 11
142+
40
143+
19 6
144+
21 13
145+
29 11
146+
40
147+
14 11
148+
9 4
149+
4 11
150+
40
151+
18 10
152+
14 12
153+
35 8
154+
40
155+
12 10
156+
1 6
157+
10 10
158+
40
159+
24 8
160+
25 6
161+
9 1
162+
50
163+
3 6
164+
46 8
165+
36 12
166+
50
167+
38 9
168+
15 1
169+
4 3
170+
50
171+
19 15
172+
31 2
173+
47 6
174+
50
175+
49 9
176+
10 7
177+
8 11
178+
50
179+
43 15
180+
39 10
181+
30 7
182+
60
183+
12 17
184+
16 12
185+
29 3
186+
60
187+
55 20
188+
33 20
189+
16 20
190+
60
191+
27 10
192+
36 3
193+
54 5
194+
60
195+
37 20
196+
42 20
197+
19 20
198+
60
199+
60 13
200+
18 10
201+
37 16
Binary file not shown.
208 KB
Binary file not shown.

0 commit comments

Comments
 (0)