Codeforces Round #184 (Div. 2) (二)

2014-11-24 02:07:56 · 作者: · 浏览: 3
ES\n");
else
printf("NO\n");
return 0;
}


第三题:

题目思路想出来了,但是就是实现不了。

经高人指点,用二进制位来表示,最后有多少个0就输出多少


[cpp]
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

const int N=100005;
typedef __int64 LL;

int save[110000];

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
mapmymap;
map::iterator it;
for(int i=1;i<=n;i++)
{
scanf("%d",&save[i]);
it=mymap.find(save[i]);
if(it==mymap.end())
{
mymap[save[i]]=1;
}
else
{
mymap.erase(it);
int temp=save[i]+1;

while(mymap.find(temp)!=mymap.end())
{
mymap.erase(temp);
temp++;
}
mymap[temp]=1;
}
}
it=mymap.begin();
int Max=-1,cnt=0;
for(;it!=mymap.end();it++)
{
cnt++;
Max=max(Max,it->first);
}
printf("%d\n",Max+1-cnt);
}
return 0;
}

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;

const int N=100005;
typedef __int64 LL;

int save[110000];

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
mapmymap;
map::iterator it;
for(int i=1;i<=n;i++)
{
scanf("%d",&save[i]);
it=mymap.find(save[i]);
if(it==mymap.end())
{
mymap[save[i]]=1;
}
else
{
mymap.erase(it);
int temp=save[i]+1;

while(mymap.find(temp)!=mymap.end())
{
mymap.erase(temp);
temp++;
}
mymap[temp]=1;
}
}
it=mymap.begin();
int Max=-1,cnt=0;
for(;it!=mymap.end();it++)
{
cnt++;
Max=max(Max,it->first);
}
printf("%d\n",Max+1-cnt);
}
return 0;
}