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

2380 Sales Report大数据量处理,老是TLE,有没有好的算法

Posted by lijiecsu at 2012-04-24 14:43:28
这道题谁AC了,我的老是TLE,帮忙看看,
代码:

#include<stdio.h>

typedef struct
{
	int qi; //item的id
	int si; //销售点的id
	int vi; //销售的数量 
} log;

log data[500000]; //保存输入的数据 
int head[10000]; //保存从第2列开始的表头 
int row[10000];  //保存从第2列开始的一行数据 

int cmp_qi(const void *a, const void *b)
{
	return ((log*)a)->qi - ((log*)b)->qi;
}

int cmp_si(const void *a, const void *b)
{
	return ((log*)a)->si - ((log*)b)->si;
}

//搜索qi在head数组中的下标 
int search(int qi, int n)
{
	int i,j,mid;
	i=0; 
	j=n-1;
	mid=(i+j)>>1;
	while(head[mid] != qi)
	{
		if(qi < head[mid]) j=mid-1;
		else i=mid+1;
		mid=(i+j)>>1;
	}
	return mid;
}

void print_row(int colsnum, int si)
{
	int i;
	printf("%d", si);
	for(i=0; i<colsnum; i++) {printf(" %d", row[i]); row[i]=0;}
	printf("\n");
}

int main()
{
	int n,i,j,last,colsnum;
	scanf("%d", &n);
	for(i=0; i<n; i++) scanf("%d %d %d", &data[i].qi, &data[i].si, &data[i].vi);
	
	//按qi排序
	qsort(data, n, sizeof(log), cmp_qi);
	//统计有多少个不同的qi,并保存到head数组
	colsnum=0;
	last=-1;
	for(i=0; i<n; i++)
	{
		if(data[i].qi != last)//新的qi 
		{
			last=data[i].qi;
			head[colsnum++]=data[i].qi;
		}
	}
	//输出表头
	printf("%d", -1);
	for(i=0; i<colsnum; i++) printf(" %d", head[i]);
	printf("\n");
	
	//按si排序
	qsort(data, n, sizeof(log) , cmp_si);
	//统计每个销售点每个物品的销售量,并输出
	last=data[0].si;
	for(i=0; i<n; i++)
	{
		if(data[i].si != last) //上一个销售点统计完毕,输出结果 
		{
			print_row(colsnum, last);
		}
		
	  last=data[i].si;
	  
		//找出当前log中qi在head数组中的下标
		j= search(data[i].qi, colsnum);
		//row数组中对应的cell值加vi
		row[j] += data[i].vi;
	}
	//输出最后一行
	print_row(colsnum, last);
	
	return 0;
}


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