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 earnAlive at 2014-04-17 18:38:20 on Problem 1009
花了两天,第一天撸了一下午,结果超时,想了一晚上没想出好方法。。。
第二天花了一早上,看各种大神的解题报告,最后撸了一下午,终于出来了,最郁闷的是,感觉没学到啥啊
#include<stdio.h>
#include<stdlib.h>
#define SIZE 1000

int pair[SIZE][2];

typedef struct omg
{
	int pos;
	int pixel;
}omg;

omg outpix[8*SIZE];
int total,width,size1,size2;

int get_value(int pos)
{
	int i=0,p=0;
	while(p<pos)
	{
		p+=pair[i++][1];
	}
	return pair[i-1][0];
}

int get_code(int pos)
{
	int max=0;
	int row,col,t_pos;
	int i,j;
	int value=get_value(pos);
	int t_value;
	
	row=(pos-1)/width;
	col=(pos-1)%width;
	for(i=row-1;i<=row+1;i++)
	{
		for(j=col-1;j<=col+1;j++)
		{
			t_pos=i*width+j+1;
			if(i<0||j<0||j>=width||t_pos>total||t_pos==pos)
			continue;
			t_value=get_value(t_pos);
			if(max<abs(t_value-value))
			max=abs(t_value-value);
		}
	}
	return max;
}

int cmp(const void* a,const void* b)
{
	omg *x=(omg *)a;
	omg *y=(omg *)b;
	return x->pos-y->pos;
}

int main()
{
	int pixel,length;
	int row,col;
	int i,j,k;
	int cur;
	while(scanf("%d",&width)!=EOF)
	{
		if(width==0)
		break;
		size1=0;
		total=0;
		while(scanf("%d%d",&pixel,&length)!=EOF)
		{
			if(pixel==0&&length==0)
			break;
			pair[size1][0]=pixel;
			pair[size1++][1]=length;
			total+=length;
		}
		printf("%d\n",width);
		cur=1;
		size2=0;
		for(k=0;k<=size1;k++)
		{
			row=(cur-1)/width;
			col=(cur-1)%width;
			for(i=row-1;i<=row+1;i++)
			{
				for(j=col-1;j<=col+1;j++)
				{
					int top=i*width+j+1;
					if(i<0||j<0||j>=width||top>total)
					continue;
					outpix[size2].pos=top;
					outpix[size2++].pixel=get_code(top);
				}
			}
			cur+=pair[k][1];
		}
		
		qsort(outpix,size2,sizeof(omg),cmp);
		omg temp=outpix[0];
		for(i=0;i<size2;i++)
		{
			if(outpix[i].pixel!=temp.pixel)
			{
				printf("%d %d\n",temp.pixel,outpix[i].pos-temp.pos);
				temp=outpix[i];
			}
		}
		printf("%d %d\n",temp.pixel,total-temp.pos+1);
		printf("0 0\n");
	}
	printf("0\n");
	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