codeforces 305 C. Ivan and Powers of Two

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

   给出一个非减序的数组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;
}
目录
相关文章
|
7月前
codeforces
【6月更文挑战第10天】
35 0
codeforces 322 A Ciel and Dancing
有n个男孩和m个女孩,他们要结对跳舞,每对要有一个女孩和一个男孩,而且其中一个要求之前没有和其他人结对,求出最大可以结多少对。
42 0
codeforces 304A. Pythagorean Theorem II
给你一个n,计算出1 ≤ a ≤ b ≤ c ≤ n.使得由abc构成的三角形满足勾股定理,c为斜边。 没有简单的方法,直接爆力,但是要注意,有些abc满足勾股定理的表达式,但不一定是三角形,所以要判断一下,根据三角形三边的性质,两边之和大于第三边,两边之差小于第三边。
69 0
C - Rumor CodeForces - 893C
C - Rumor CodeForces - 893C
94 0
|
数据安全/隐私保护
Codeforces 417D.Cunning Gena (状压DP)
Codeforces 417D.Cunning Gena (状压DP)
92 0
|
人工智能
Codeforces 777C Alyona and Spreadsheet
C. Alyona and Spreadsheet time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard ...
1163 0
Codeforces 591B Rebranding
B. Rebranding time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output ...
858 0