| ||||||||||
| 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 | |||||||||
又给大家拖后腿了。。。花了两天,第一天撸了一下午,结果超时,想了一晚上没想出好方法。。。
第二天花了一早上,看各种大神的解题报告,最后撸了一下午,终于出来了,最郁闷的是,感觉没学到啥啊
#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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator