Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define int long long int
- using namespace std;
- bool sortvec (const vector<int>& v1, const vector<int>& v2){
- return v1[0] < v2[0];
- }
- signed main(){
- //freopen("in.txt", "r", stdin);
- int R, C, F, S, G; cin >> R >> C >> F >> S >> G;
- //input F
- vector<vector<vector<int>>> list_f(F);
- for (int i = 0; i < F; i++){
- int j, r, c;
- cin >> j;
- while(j--){
- cin >> r >> c;
- list_f[i].push_back({((r-1)*C+c-1), r, c});
- }
- sort(list_f[i].begin(), list_f[i].end(), sortvec);
- }
- //input S
- vector<vector<vector<int>>> list_s(F);
- for (int i = 0; i < S; i++){
- int r, c, D, f;
- cin >> r >> c >> D >> f;
- list_s[f-1].push_back({D, r, c});
- }
- //input T
- vector<vector<int>> list_dist(F);
- vector<int> list_ans;
- for (int f = 0; f < F; f++){
- sort(list_s[f].begin(), list_s[f].end(), sortvec);
- int dist;
- for (int i = 0; i < list_s[f].size(); i++){
- int m = list_s[f][i][1];
- int n = list_s[f][i][2];
- dist = abs(list_f[f][i][1]-m)+abs(list_f[f][i][2]-n);
- list_dist[f].push_back(dist);
- }
- int T; cin >> T;
- if (T <= list_dist[f].size()) {
- sort(list_dist[f].begin(), list_dist[f].end());
- list_ans.push_back(accumulate(list_dist[f].begin(), list_dist[f].begin()+T, 0LL));
- }
- }
- sort(list_ans.begin(), list_ans.end());
- cout << accumulate(list_ans.begin(), list_ans.begin()+G, 0LL) << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement