voidsolve(int n, int k, int l, vector<int>& lengths){ sort(lengths.begin(), lengths.end()); int minLength = lengths[0]; int target = minLength + l; int left = 0, right = n * k; while (left < right) { int mid = (right - left) / 2 + left; if (lengths[mid] == target) { left = mid + 1; } elseif (lengths[mid] < target) { left = mid + 1; } else { right = mid; } } if (left < n) { out << 0 << endl; return; } int x = 0; if (k > 1) { x = (left - n + k - 2) / (k - 1); } longlong res = 0; for (int i = 0; i < x * k; i += k) { res += lengths[i]; } for (int i = left - n + x; i < left; i++) { res += lengths[i]; } out << res << endl; }
intmain(){ int n, k, l; in >> n >> k >> l; vector<int> lengths; for (int t = 1; t <= n * k; t++) { int length; in >> length; lengths.push_back(length); } solve(n, k, l, lengths); return0; }