题意:
题目链接:http://acm.ecnu.edu.cn/problem/3218/
思路:
map维护信息,key表示长度为len的连续空位,value为这样的空位的数目。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int MAXN = 1e5 + 10;
map <LL, LL> :: reverse_iterator it;
int main() {
int T, cs = 0;
scanf("%d", &T);
while (T--) {
LL n, k;
scanf("%lld%lld", &n, &k);
map <LL, LL> mp;
mp[n] = 1;
LL cnt = 0, Min, Max;
for (it = mp.rbegin(); it != mp.rend(); ++it) {
LL len = it->first, num = it->second;
Min = (len - 1) / 2;
Max = len - 1 - Min;
mp[len] = 0;
mp[Min] += num;
mp[Max] += num;
cnt += num;
if (cnt >= k) break;
}
printf("Case %d: %lld %lld\n", ++cs, Max, Min);
}
return 0;
}