EOJ-3218 思维 + STL

来源:互联网 发布:服务器默认端口号 编辑:程序博客网 时间:2024/06/04 21:31

题意:

题目链接: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;}