Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
我写了个同样的C又WA了In Reply To:经过修改,终于AC Posted by:frankvista at 2010-08-01 21:23:32 #include <stdio.h> #define nmax 25000 typedef long long keytype; typedef struct sheap { int heapsize; keytype key[nmax]; }heap; heap a; void keep(int i) { int next=i; if(i+i<=a.heapsize) { if(a.key[i+i]<a.key[next]) next=i+i; if(i+i+1<=a.heapsize && a.key[i+i+1]<a.key[next]) next=i+i+1; if(next!=i) { a.key[i]^=a.key[next]; a.key[next]^=a.key[i]; a.key[i]^=a.key[next]; keep(next); } } } keytype insert(keytype x) { a.key[++a.heapsize]=x; int now; for(now=a.heapsize;now>1 && a.key[now]<a.key[now>>1];now>>=1) { a.key[now]^=a.key[now>>1]; a.key[now>>1]^=a.key[now]; a.key[now]^=a.key[now>>1]; } return x; } keytype delete_min() { keytype ret=a.key[1]; a.key[1]=a.key[a.heapsize--]; keep(1); return ret; } void buildheap() { int i; for(i=a.heapsize>>1;i>0;i--) keep(i); } int main(int argc,char *argv[]) { int n,i; keytype ans=0; // freopen("temp.in","r",stdin); freopen("temp.out","w",stdout); scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&a.key[i]); ans-=a.key[i]; } a.heapsize = n; buildheap(); while(1) { if(a.heapsize==1) { ans+=a.key[1]; break; } ans+=insert(delete_min()+delete_min()); } printf("%d\n",ans); // fclose(stdin); fclose(stdout); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator