Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:WA了十几次了,实在找不出错误,恳请高人指点一下!!以下是代码

Posted by youyousky20 at 2007-10-14 12:40:32 on Problem 2786
In Reply To:WA了十几次了,实在找不出错误,恳请高人指点一下!!以下是代码 Posted by:ByteChen at 2007-10-14 11:22:49
> #include <stdio.h>
> #include <stdlib.h>
> 
> #define   SIZE  800000
> 
> struct info{
>     int q;
>     long end;
> } order[SIZE];
> 
> int heap[SIZE];
> void insert(int heap[],long n,int x);
> int Delete(int heap[],long n);
> 
> int comp(const void *p, const void *q);
> 
> int main()
> {
> 	long m,i,N,end,max;
> 
> 	while(scanf("%ld",&N) == 1)
> 	{
> 	    for(i = 0; i < N; i++)
>             scanf("%d %ld",&order[i].q,&order[i].end);
>         /* 以end为标准对order由小到大排序 */
>         qsort((struct info*)order,N,sizeof(order[0]),comp);
> 
>         end = max = m = 0;
>         for(i = 0; i < N; i++)
>         {
>             if(order[i].q > order[i].end)
>                 continue;
>             end += order[i].q;
>             insert(heap,++m,order[i].q); /* 将order[i].q编入最大堆中 */
>             max++;
>             if(order[i].end < end)  /* 成立则取出存入的最大q,减去 */
>             {
>                 end -= Delete(heap,m);
>                 max--;
>                 m--;
>             }
>         }
>         printf("%ld\n",max);
> 	}
> 	return 0;
> }
> 
> int comp(const void *p, const void *q)
> {
> 	struct info px = * (struct info *)p;
> 	struct info qx = * (struct info  *)q;
> 	return px.end - qx.end;
> }
> /* 将x编入最大堆中,x加入后堆中有n个节点 */
> void insert(int heap[],long n,int x)
> {
>     long i,j,temp;
> 
>     i = n;
>     j = n / 2;
>     heap[n] = x;
>     while(j >= 1 && heap[j] < x)
>     {
>         temp = heap[j];
>         heap[j] = heap[i];
>         heap[i] = temp;
>         i = j;
>         j = i / 2;
>     }
> }
> /* 返回大小为n的堆的根节点,并且维护堆 */
> int Delete(int heap[],long n)
> {
>     long i,j,max,temp;
> 
>     max = heap[1];
>     heap[1] = heap[n];
> 
>     i = 1;
>     j = 2 * i;
>     while(j < n - 1 && (heap[i] < heap[j] || heap[i] < heap[j+1]))
>     {
>         if(heap[j] >= heap[j+1])
>         {
>             temp = heap[i];
>             heap[i] = heap[j];
>             heap[j] = temp;
>         }
>         else
>         {
>             temp = heap[i];
>             heap[i] = heap[j+1];
>             heap[j+1] = temp;
>         }
>         i = j;
>         j = 2 * i;
>     }
>     return max;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator