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

为什么还错? 大家试一下

Posted by c2h2 at 2006-08-26 12:02:50 on Problem 1009
#include <iostream>
using namespace std;


#define MAX 1000


short intensity[MAX];
int pos[MAX];
short myself;


void edge(int, int);
short getInt(int x, int y, int currX, int currY);
short maxdiff8(short self, short a, short b, short c, short d, short e, short f, short g, short h);
short max(short a, short b);
short diff(short a, short b);
short abs(short a);



int main(){
	int rows, cols;
	int cells=0, value=0, quantity=0;
	int counter=0;
	
	
	cin >> cols;
	while (cols!=0){
		cin >> value >> quantity;
		while(value!=0 && quantity!=0){
			cells += quantity;
			intensity[counter]=value;
			pos[counter] = cells;
			counter++;
			cin >> value >> quantity;
		}
		cout <<cols <<"\n";
		
		rows=cells/cols;
	
		edge(cols, rows);
		cout<<"0 0" <<"\n";
		cells=0;
		counter=0;
		cin >> cols;
	
	}

	cout << "0";
	return 0;
	
}


void edge( int x, int y){
	int i,j;
	short temp;
	int currCells=0, currValue=-1;
	int currPos=0;
	int cells = x*y;
	int n=0;
	int done=0;
	int curr;
	int jumpPos;
	
	
	for (j=0; j<y; j++){
		for(i=0; i<x; i++){
			/*some skipping needed*/
			curr=i+j*x;
			
			if(done==0 && currCells>2*x){
				
				for(n=0; n<MAX; n++){
					if(curr<pos[n]){
						if(pos[n]-currCells>2*x){
							done=1;
							jumpPos = pos[n]-2*x-1;
							currCells+=(jumpPos-curr);
							i=jumpPos%x;
							j=jumpPos/x;	
							break;
							
						}	
					}
				}
				
			}
	
				
						
			myself=getInt(x,y,i,j);
			
			temp=maxdiff8(
									myself,
									getInt(x, y, i-1, j-1),
									getInt(x, y, i, j-1),
									getInt(x, y, i+1, j-1),
									getInt(x, y, i-1, j),
									getInt(x, y, i+1, j),
									getInt(x, y, i-1, j+1),
									getInt(x, y, i, j+1),
									getInt(x, y, i+1, j+1));
	
			if(temp==currValue && (i+1)*(j+1)!=cells){
				
				currValue=temp;
				currCells++;
			}else{
				if((i+j)!=0) {
					if((i+1)*(j+1)==cells){
						cout << currValue << " " << currCells+1 <<"\n";
					}else{
						cout << currValue << " " << currCells <<"\n";
					}
				}
				currValue=temp;
				currCells=1;				
				done=0;
			}
		}
	}
	return;
}


short getInt(int x, int y, int currX, int currY){
	int res=currX+x*currY;
	if( res < 0 || res>x*y || currX<0 || currX>=x || currY<0 || currY>=y ){// = because currX is index x is length
		return myself;
	}else{
		//para okay, do nothing

	}
	int i;
	for(i=0; i<MAX; i++){
		if(res<pos[i]){
			return intensity[i];
		}
	}
	return -1;
	
}




short maxdiff8(short self, short a, short b, short c, short d, short e, short f, short g, short h){
	
	short k=max(
					max(	max(diff(self, a), diff(self, b)),
							max(diff(self, c), diff(self, d))
						),
					max(	max(diff(self, e), diff(self, f)),
							max(diff(self, g), diff(self, h))
						)
				);

				return k;
}

short max(short a, short b){
	if (a>b){
		return a;
	}else{
		return b;
	}
}


short diff(short a, short b){
	return abs(a-b);
}
	

short abs(short a){
	if(a<0){
		return -a;
	}else{
		return a;
	}
}

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