CodeForces 587A

Posted 竹林灯火

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 587A相关的知识,希望对你有一定的参考价值。

题目链接:

 http://codeforces.com/problemset/problem/587/A

题意:

输入n个数,在这n个数中,寻找有多少个数不能消除掉

消除方法:两个相同的数消除后,生成大它一个数,比如两个1消除后可以生成一个2,

解题思路:

可以定义个数组A[6100000],在这里要多定义一些,如果是6000000个数全是6000000,那么新生成的数会达到2^20次方之大,为了防止数组不够用

所以多定义一些比较好。

每输入一个数x,即用A[x]++,即统计这个数已经输入了多少个,如果个数大于2,则A[x+1]++,A[x]-=2;消除两个x,x+1的个数增加1;

所有的数输入完毕后,也已经消除和增加完毕,只需对A数进行判断个数是否为1即是未能消除的累加即可。

 

程序代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int M=1000000+30;
int num[M];

bool cmp(int x,int y)
{
 return x>y;
}
int main()
{
 int n,sum,i,x;
 while(scanf("%d",&n)==1)
 {
  memset(num,0,sizeof(num));
   for(i=0;i<n;i++)
   {
    scanf("%d",&x);
    num[x]++;
    int k=x;
    while(num[k]>=2)
    {
     num[k+1]++;
     num[k]=num[k]-2;
     k++;
    }
   }
   sort(num,num+M,cmp);
   sum=0;
   for(i=0;i<n;i++)
    if(num[i]!=0) sum++;
   printf("%d\n",sum);
 }
 return 0;
}

  

以上是关于CodeForces 587A的主要内容,如果未能解决你的问题,请参考以下文章

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段

c_cpp Codeforces片段

Codeforces 86C Genetic engineering(AC自动机+DP)

CodeForces 1005D Polycarp and Div 3(思维贪心dp)

(Incomplete) Codeforces 394 (Div 2 only)

CodeForces 931F Teodor is not a liar!