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](代码片段
Codeforces 86C Genetic engineering(AC自动机+DP)
CodeForces 1005D Polycarp and Div 3(思维贪心dp)