C. Liebig's Barrels | Educational Codeforces Round 44
int N, K, L; cin >> N >> K >> L; int M = N*K; vi A(M); rep(a, M)cin >> A[a]; sort(A.rbegin(), A.rend()); // 必ずできる一番小さい樽の大きさで制限 ll lim = (ll)A.back() + L; ll re = 0; // 使ってない板の数、作った樽の数 int cnt = 0, taru = 0; // 板の長さを降順に見ていく // 大きい樽を貪欲に作っていく each(a, A) { // 一番小さい樽との大きさの差がL以下 // かつ板がaも合わせてK個ある if (a <= lim && cnt >= K - 1) { cnt -= K - 1; taru++; re += a; } else { // あとで使う板 cnt++; } } if (taru < N)re = 0; cout << re << endl;