-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuva10660.cpp
More file actions
70 lines (62 loc) · 1.81 KB
/
uva10660.cpp
File metadata and controls
70 lines (62 loc) · 1.81 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
/* Rishikesh
* UVA 10660
*/
#include<iostream>
#include<string>
#include<sstream>
#include<iomanip>
#include<vector>
#include<set>
#include<map>
#include<algorithm>
#include<iomanip>
#include<cstdint>
#include<numeric>
using namespace std;
int disthelper(int x, int y, int a) {
return abs(x-a/5) + abs(y-a%5);
}
int dist(int x, int y, int p, vector<int> &a) {
int tmp[5];
transform(a.begin(), a.end(), tmp,
[&x,&y](int u) {return disthelper(x,y,u);});
return p * *min_element(tmp, tmp+5);
}
int main() {
int ncases;
cin >> ncases;
while(ncases--) {
int nareas;
cin >> nareas;
vector<int> x(nareas),y(nareas), population(nareas);
for(int i = 0; i < nareas; i++) {
cin >> x[i] >> y[i] >> population[i];
}
int64_t mindist=INT64_MAX;
vector<int> answer(5), a(5);
for(a[0] = 0; a[0] < 25; a[0]++) {
for(a[1] = a[0]+1; a[1] < 25; a[1]++) {
for(a[2] = a[1]+1; a[2] < 25; a[2]++) {
for(a[3] = a[2]+1; a[3] < 25; a[3]++) {
for(a[4] = a[3]+1; a[4] < 25; a[4]++) {
int64_t distcalc = 0;
for(int i = 0; i< nareas; i++) {
distcalc += dist(x[i], y[i],
population[i], a);
}
if (distcalc < mindist) {
mindist=distcalc;
answer = a;
}
}
}
}
}
}
cout << answer[0] << " "
<< answer[1] << " "
<< answer[2] << " "
<< answer[3] << " "
<< answer[4] << "\n";
}
}