zoukankan      html  css  js  c++  java
  • codeforces 305 C. Ivan and Powers of Two

    题目链接

          给出一个非减序的数组a[n], 然后得到s=2^a1+.……+2^an, 要使s为2^v -1,需要在数组中添加几个数。

          我的思路是这样的,由2^a+2^a = 2^(a+1)可知,如果有两个连续的数a,我们可以把他们合并为a+1放入集合中,使集合中没有重复的数,我可以用stl里的set。如果想要满足题目中的要求,集合中必须有最大那个数个元素,缺多少就可以计算出来了。

    代码:

    //codeforces 305 C. Ivan and Powers of Two
    //2013-06-05-17.19
    #include <stdio.h>
    #include <set>
    #include <algorithm>
    #include <iostream>
    using namespace std;
    set<int> s;
    int main()
    {
        int n, a;
        while (scanf("%d", &n) != EOF)
        {
            s.clear();
            int maxn = 0;
            for (int i = 1; i <= n; i++)
            {
                scanf("%d", &a);
                while (s.count(a))
                {
                    s.erase(a);
                    a++;
                }
                s.insert(a);
                maxn = max(a, maxn);
            }
            printf("%d\n", maxn-s.size()+1);
        }
        return 0;
    }
    



  • 相关阅读:
    代理模式
    面向对象设计原则
    砝码破碎
    阿里EasyExcel使用
    IBM的OpenJ9
    java反射 (复习)
    DecimalFormat保留小数
    Object类
    SQLMAP用法
    SQL盲注之时间注入
  • 原文地址:https://www.cnblogs.com/xindoo/p/3595131.html
Copyright © 2011-2022 走看看