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

1009问题 为什么样例我输出全是对的 就是W/A 哪位大神来帮我看一下!???

Posted by FakerInHeart at 2015-04-17 11:40:38 and last updated at 2015-04-17 11:41:44
#include <iostream>
#include <map>

using namespace std;

int width, height;//图像宽度,高度 
int pairs[1000][2];//数据数组
int row; //数据行数 

int Compute_Value(int num)
{
	for(int i = row - 1; i >= 0; i--) if(num >= pairs[i][0]) return pairs[i][1];	
}


int Compute_EDV(int x, int y)
{
	int max = 0;
	int abstract = Compute_Value(y * width + x);
	
	int temp;
	for(int i = x - 1; i <= x + 1; i++)
	{
		for(int j = y - 1; j <= y + 1; j++)
		{
			if(i >= 0 && i <= width - 1 && j >= 0 && j <= height - 1 && (i != x || j != y))
			{
				temp = Compute_Value(j * width + i) - abstract;
				if(temp < 0) temp = -temp;
				if(temp > max) max = temp;
			}
		}	
	}
	return max;
}

int main()
{
	int pair_value, pair_num;//数据
	int num_allpixels;//元素总个数
	map<int, int> EDV;
	while(cin >> width)
	{
		if(!width) 
		{
			cout << "0" << endl;
			break;
		}
		
		num_allpixels = 0;
		row = 0;
		
		while(cin >> pair_value >> pair_num)
		{
			if(!pair_value && !pair_num) break;
			pairs[row][0] = num_allpixels;
			pairs[row][1] = pair_value;
			num_allpixels += pair_num;
			++row;
		}
		
		//开始 
		cout << width << endl; 
		
		height = num_allpixels / width;//计算图像高度
		for(int i = 0; i < row; i++) 
		{
			int x = pairs[i][0] % width;//x坐标从0~width-1
			int y = pairs[i][0] / width;//y坐标从0~height-1
			for(int j = x - 1; j <= x + 1; j++)
			{
				for(int k = y - 1; k <= y + 1; k++) 
				{
					if(j >= 0 && j <= width - 1 && k >= 0 && k <= height - 1) EDV.insert(make_pair(k * width + j, Compute_EDV(j, k)));
				}	
			}	
		}
		
		map<int, int>::const_iterator iter_EDV = EDV.begin();
		map<int, int>::const_iterator iter2_EDV = EDV.begin();
		while(iter_EDV != EDV.end())
		{
			++iter2_EDV;
			while(iter2_EDV != EDV.end() && iter2_EDV->second == iter_EDV->second) ++iter2_EDV;
			if(iter2_EDV == EDV.end()) break;
			cout << iter_EDV->second << " " << iter2_EDV->first - iter_EDV->first << endl;
			iter_EDV = iter2_EDV;
		}
		cout << iter_EDV->second << " " << num_allpixels - iter_EDV->first << endl;
		//结束 
		cout << "0 0" << endl;
		EDV.clear();
	}
	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