| ||||||||||
| 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 | |||||||||
Re:1009题,总是runtime error,高手大牛们都过来帮看看是什么原因啊,谢谢啦In Reply To:1009题,总是runtime error,高手大牛们都过来帮看看是什么原因啊,谢谢啦 Posted by:clinton at 2008-06-01 16:32:59 > #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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator