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

总是runtime error,大家帮看看啊

Posted by clinton at 2008-06-01 16:39:40 on Problem 1009
#include <iostream>

#define NUM 80000
#define MAXX 100000
using namespace std;

long data_pos[NUM][3];
int data_value[NUM];

long res_num[MAXX];
int res_value[MAXX];
int pair_num = 0;
int len = 0;
int res_len = 0;

void single_process(int i1, long i2);
int main()
{
	int value; 
	long num;
	long pos = 0;
	while(cin>>len)
	{
		pos = 0;
		res_len = 0;
		pair_num = 0;
		if(len == 0) 
			break;
		while(cin>>value>>num)
		{
			if(value == 0 && num ==0)
				break;
			////////数据输入///////////
			data_pos[pair_num][0] = pos;
			pos = pos + num;
			data_pos[pair_num][1] = pos - 1;
			data_pos[pair_num][2] = num;
			data_value[pair_num] = value;
			pair_num ++;
		}
		//cout<<"last:"<<data_pos[pair_num-1][1]<<endl;
		////////数据处理///////////
		long cur_pos = 0;
		for(int i1 = 0; i1 < pair_num; i1++)
		{
			//无法简化
			if(data_pos[i1][2] < (4 * len - 1))
			{
				//逐个处理
				for(long i2 = data_pos[i1][0]; i2 <= data_pos[i1][1]; i2++)
				{
					single_process(i1, i2);
					cur_pos ++;
				}
			}
			//可以集团简化处理
			else
			{
				//先处理首部
				long pos11 = long(long(cur_pos / len) + 2);
				long stage1 = long(pos11 * len - 1);

				for(long i = data_pos[i1][0]; i <= stage1; i++)
				{
					single_process(i1, i);
					//cur_pos ++;
				}
				//处理中部
				long stage2 = long((data_pos[i1][1]/len - 1)*len -1);
				res_num[res_len] = stage2 - stage1;
		    	res_value[res_len] = 0;
				res_len ++;
				//cur_pos += data_pos[i1][]
				//处理尾部

				long stage3 = data_pos[i1][1];
				for(long j = stage2 + 1; j <= stage3; j++)
					single_process(i1, j);
				cur_pos += data_pos[i1][2];

			}
		}

		/////合并处理
		int temp_value = res_value[0];
		long temp_num = 0;
		cout<<len<<endl;
		//cout<<"res_len:"<<res_len<<endl;
		for(int count = 0; count < res_len; count++)
		{
			if(res_value[count] == temp_value)
			{
				temp_num += res_num[count];
			}
			else
			{
				cout<<temp_value<<" "<<temp_num<<endl;
				temp_value = res_value[count];
				temp_num = 1;
			}
		}
		cout<<temp_value<<" "<<temp_num<<endl;
		cout<<"0"<<" "<<"0"<<endl;
	}
	cout<<"0"<<endl;
	return 0;
}

void single_process(int i1, long i2)
{
	//pos1
	int max = 0;
	long pos1 = i2 - len - 1;
	int temppos;
	int val;
	if(pos1 >= 0 && i2 % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][0] > pos1)
			temppos --;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"f1"<<endl;
	//cout<<"pos1:"<<max<<endl;
	//pos2
	pos1 = i2 - len;
	if(pos1 >= 0)
	{
		temppos = i1;
		while(data_pos[temppos][0] > pos1)
			temppos --;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"f2"<<endl;
	//cout<<"pos2:"<<max<<endl;
	//pos3
	pos1 = i2 - len + 1;
	if(pos1 >= 0 && (i2 + 1) % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][0] > pos1)
			temppos --;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"f3"<<endl;
	//cout<<"pos3:"<<max<<endl;
	//pos4
	pos1 = i2 - 1;
	if(pos1 >= 0 && i2 % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][0] > pos1)
			temppos --;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"f4"<<endl;
	//cout<<"pos4:"<<max<<endl;
	//pos5
	pos1 = i2 + 1;
	if(pos1 <= data_pos[pair_num - 1][1] && (i2 + 1) % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][1] < pos1)
			temppos ++;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"pos5:"<<max<<endl;
	//pos6
	//cout<<"f5"<<endl;
	pos1 = i2 + len -1;
	if(pos1 <= data_pos[pair_num - 1][1] && i2 % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][1] < pos1)
			temppos ++;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	//cout<<"pos6:"<<max<<endl;
	//pos7
	//cout<<"f6"<<endl;
	pos1 = i2 + len;
	if(pos1 <= data_pos[pair_num - 1][1])
	{
		temppos = i1;
		while(data_pos[temppos][1] < pos1)
			temppos ++;
		//if(res_len == 31)cout<<"datavale:"<<pos1<<endl;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	pos1 = i2 + len + 1;
	if(pos1 <= data_pos[pair_num - 1][1] && (i2 + 1) % len != 0)
	{
		temppos = i1;
		while(data_pos[temppos][1] < pos1)
			temppos ++;
		val = abs(data_value[temppos] - data_value[i1]);
		if(val > max) max = val;
	}
	res_num[res_len] = 1;
	res_value[res_len] = max;
	res_len ++;
}


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