Ivan and Powers of Two

來源:互聯網
上載者:User
 Ivan and Powers of Twotime limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Ivan has got an array of n non-negative integers a1, a2, ..., an.
Ivan knows that the array is sorted in the non-decreasing order.

Ivan wrote out integers 2a1, 2a2, ..., 2an on
a piece of paper. Now he wonders, what minimum number of integers of form 2b (b ≥ 0)need
to be added to the piece of paper so that the sum of all integers written on the paper equalled 2v - 1 for
some integer v (v ≥ 0).

Help Ivan, find the required quantity of numbers.

Input

The first line contains integer n (1 ≤ n ≤ 105).
The second input line contains n space-separated integers a1, a2, ..., an (0 ≤ ai ≤ 2·109).
It is guaranteed that a1 ≤ a2 ≤ ... ≤ an.

Output

Print a single integer — the answer to the problem.

Sample test(s)input
40 1 1 1
output
0
input
13
output
3
Note

In the first sample you do not need to add anything, the sum of numbers already equals 23 - 1 = 7.

In the second sample you need to add numbers 20, 21, 22.

思路:這裡寫中文思路吧,下面用英文下思路是因為四級還沒過關,囧,必須要練練,不然完蛋了有木有啊

貪心。

首先要準備構造等比序列吧

1、如果序列裡面沒有相同的很好辦

2、如果非降序序列有相同的怎麼辦?

必須合并相同的兩個數,直到當前的這個數在集合裡面唯一。

理由:

(1)、a,a 合并成a+1是因為:2^a+2^a=2*2^a=2^(a+1),合并成一個和再加一個來和a進行組合是一樣的花費

(2)、再說2^a已經是大於低位的所有數字之和,所以出現2個a絕對不會考慮把a拿到低位去和其他數拼湊成低位的其他缺的數。也就是說對於當前ai而言:

不用去管低位,低位有什麼就是什麼,沒什麼就得補上,ai只需要往上考慮即可

AC Program:

#include<iostream>#include<stdio.h>#include<string.h>#include<set>using namespace std;//a,a exists,it must be combined cause //(1)a,a->a+1  can minimize the number//(2)2^a has been bigger than the lower bit numbers,it's impossible to be used to make//the sum of lower bit numbers.int main(){set<int>ss;int n;int a;cin>>n;int maxn=0;for(int i=0;i<n;i++){   cin>>a;   while(ss.count(a))ss.erase(a),a++;//2^a+2^a=2*2^a=2^(a+1)//change until 'a' are the only one.   ss.insert(a);           maxn=max(a,maxn); }cout<<maxn+1-ss.size()<<endl;//system("Pause");return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.