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 |
和题目要求一样,结果也一样,为什么总是wrong answer呢?#include <iostream> #include <math.h> using namespace std; struct block { int value; int runlength; }; int cmp(const void *a,const void *b) { int *x=(int *)a; int *y=(int *)b; return *x-*y; } class image { block *inblock; int numberofinblock; int numofoutblock; int piexlnum; int pointnumber; block *outblock; int *point; int linelength; public: image() {linelength=0;inblock=outblock=NULL;numberofinblock=0;point=NULL;} bool input() { cin>>linelength; if(linelength ==0) return false; inblock=new block[1001]; int v,r; int i=0; cin>>v>>r; while(v!=0) { inblock[i].value=v; inblock[i].runlength=r; i++; cin>>v>>r; } numberofinblock=i; cout<<linelength<<endl; return true; } void exchangeblock()//将runlength转化为分界 { int dex=0; for(int i=0;i<numberofinblock;i++) { dex+=inblock[i].runlength; inblock[i].runlength=dex; } piexlnum=dex; } void setpoint() { int now=0; int sum=0;//存储分界点的个数 point=new int[numberofinblock*6]; for(int i=0;i<numberofinblock;i++) { point[sum]=now;sum++; if(now-linelength>-1) { point[sum]=now-linelength;//记录当前点的上面一个点的位置 sum++; } if(now+linelength<piexlnum) { point[sum]=now+linelength;//记录当前点的下面一个点的位置 sum++; } now=inblock[i].runlength-1;//定位到块后面一个点 point[sum]=now;sum++; if(now-linelength>-1) { point[sum]=now-linelength;//记录当前点的下面一个点的位置 sum++; } if(now+linelength<piexlnum) { point[sum]=now+linelength;//记录当前点的上面一个点的位置 sum++; } now++;//定位到下一个块的开始一个点 } pointnumber=sum; qsort(point,pointnumber,sizeof(int),cmp); int temp=point[0]; int realnumber=1; for(int i=1;i<pointnumber;i++) { if(point[i]!=temp) { temp=point[i]; point[realnumber]=point[i]; realnumber++; } } pointnumber=realnumber; } void getoutblock() { outblock=new block[1001]; int bnumber=0; for(int i=0;i<pointnumber-1;i++) { outblock[bnumber].runlength=1; outblock[bnumber].value=getads(point[i]); bnumber++; if(point[i+1]-point[i]>1) { outblock[bnumber].runlength=point[i+1]-point[i]-1; outblock[bnumber].value=getads(point[i]+1); bnumber++; } } outblock[bnumber].runlength=1; outblock[bnumber].value=getads(point[pointnumber-1]); bnumber++; int temp=outblock[0].value; numofoutblock=0; for(int i=1;i<bnumber;i++) { if(outblock[i].value!=temp) { temp=outblock[i].value; numofoutblock++; outblock[numofoutblock]=outblock[i]; } else { outblock[numofoutblock].runlength+=outblock[i].runlength; } } numofoutblock++; } int getads(int pos) { int posvalue=getvalue(pos); int ads[8]; int surroundnumbers=0; if(pos-linelength>-1) { ads[surroundnumbers]=abs(posvalue-getvalue(pos-linelength)); surroundnumbers++; int flag=pos%linelength; if(flag!=0) { ads[surroundnumbers]=abs(posvalue-getvalue(pos-linelength-1)); surroundnumbers++; } if(flag!=linelength-1) { ads[surroundnumbers]=abs(posvalue-getvalue(pos-linelength+1)); surroundnumbers++; } } if(pos+linelength<piexlnum) { ads[surroundnumbers]=abs(posvalue-getvalue(pos+linelength)); surroundnumbers++; int flag=pos%linelength; if(flag!=0) { ads[surroundnumbers]=abs(posvalue-getvalue(pos+linelength-1)); surroundnumbers++; ads[surroundnumbers]=abs(posvalue-getvalue(pos-1)); surroundnumbers++; } if(flag!=linelength-1) { ads[surroundnumbers]=abs(posvalue-getvalue(pos+linelength+1)); surroundnumbers++; ads[surroundnumbers]=abs(posvalue-getvalue(pos+1)); surroundnumbers++; } } int max=ads[0]; for(int i=1;i<surroundnumbers;i++) { if(ads[i]>max) max=ads[i]; } return max; } int getvalue(int pos) { int posvalue; for(int i=0;i<numberofinblock;i++) { if(pos<inblock[i].runlength) { posvalue=inblock[i].value; break; } } return posvalue; } void output() { for(int i=0;i<numofoutblock;i++) cout<<outblock[i].value<<" "<<outblock[i].runlength<<endl; cout<<0<<" "<<0<<endl; } }; int main() { image picture; while(picture.input()) { picture.exchangeblock(); picture.setpoint(); picture.getoutblock(); picture.output(); } cout<<0<<endl; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator