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

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

Posted by ByteChen at 2007-10-14 11:22:49 on Problem 2786 and last updated at 2007-10-14 11:23:35
#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