HDU-1058 堆

来源:互联网 发布:2016nba总决赛每场数据 编辑:程序博客网 时间:2024/06/05 02:03

输出的格式要注意一下,看了DISCUSS才AC。

/* * hdu-1058 humnle numbers * mike-w * 2012-5-20 */#include<stdio.h>#include<stdlib.h>#define MAX_N 6543#define MAX_HEAP_SIZE 100000#define UPPER 2000000008__int64 humble[MAX_N];__int64 heap[MAX_HEAP_SIZE];int heap_size;int n;int swap(__int64 *e1,__int64 *e2){__int64 t=*e1;*e1=*e2;*e2=t;return 0;}int heap_in(__int64 e){if(heap_size==MAX_HEAP_SIZE)return -1;heap[++heap_size]=e;__int64 p,x;x=heap_size;p=x/2;while(p && heap[x]<heap[p]){swap(heap+x,heap+p);x=p;p=x/2;}return 0;}int heap_out(__int64 *e){if(heap_size==0)return -1;*e=heap[1];swap(heap+1,heap+heap_size);heap_size--;__int64  x,p,lc,rc;p=1;while(1){lc=2*p;rc=lc+1;x=p;if(lc<=heap_size && heap[lc]<heap[x])x=lc;if(rc<=heap_size && heap[rc]<heap[x])x=rc;if(x==p)break;swap(heap+x,heap+p);p=x;}return 0;}int init(void){heap_in(1);int cnt=0,ret;__int64 e;while(cnt<MAX_N){while(!(ret=heap_out(&e))&&e==humble[cnt]);if(ret)break;humble[++cnt]=e;heap_in(2*e);heap_in(3*e);heap_in(5*e);heap_in(7*e);}return 0;}int main(void){#ifndef ONLINE_JUDGEfreopen("in","r",stdin);#endifint e;init();while(scanf("%d",&e),e){printf("The %d",e);if(e%10==1 && e%100!=11)printf("st");else if(e%10==2 && e%100!=12)printf("nd");else if(e%10==3 && e%100!=13)printf("rd");elseprintf("th");printf(" humble number is %I64d.\n",humble[e]);}return 0;}


原创粉丝点击