CF169A Chores 题解
Content
两兄弟要分担 \(n\) 件家务,第 \(i\) 件家务有一个复杂度 \(h_i\)。兄弟俩以一个数 \(x\) 为界。所有满足复杂度 \(>x\) 的家务都给哥哥做,其余的给弟弟做。他们想找到一个数 \(x\),使得哥哥刚好做 \(a\) 件家务,弟弟刚好做 \(b\) 件家务。试求出所有可能的 \(x\) 的个数。
数据范围:\(2\leqslant n\leqslant 2000,a,b\geqslant 1,a+b=n,1\leqslant h_i\leqslant 10^9\)。
Solution
我们先将所有的家务按照复杂度从小到大排序,然后只需要看复杂度第 \(k\) 小的家务的复杂度是否和复杂度第 \(k+1\) 小的家务的复杂度之间的数值关系就好,如果没有方案答案就是 \(0\),否则答案就是复杂度第 \(k\) 小的家务的复杂度是否和复杂度第 \(k+1\) 小的家务的复杂度之间的差值。
Code
int a, b, n, h[2007], ans;
int main() {
getint(n), getint(a), getint(b);
_for(i, 1, n) getint(h[i]);
sort(h + 1, h + n + 1);
writeint(ans = h[b + 1] - h[b]);
return 0;
}