zoukankan      html  css  js  c++  java
  • 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
    ",sum);
     }
     return 0;
    }
    

      

  • 相关阅读:
    二分搜素——(lower_bound and upper_bound)
    二分(搜索)查找
    算法复杂度中的O(logN)底数是多少
    hdu 1050 Moving Tables
    hdu 1010 Tempter of the Bone
    hud 3123 GCC
    “123”——> 123
    基本模运算
    101个MySQL的调节和优化的Tips
    一个最简单的图片缩略图
  • 原文地址:https://www.cnblogs.com/www-cnxcy-com/p/5539664.html
Copyright © 2011-2022 走看看