2018-03-28
#include
int getlocation(int);
int getresult(int,int);
int findvalue(int);
struct{
int value; int total;
}pexi[1001];
struct{
int output; int location;
}pexo[100000];
long flag[100000]={0};
int px,py,n,b,low;
int main(){
int i,j,k=0,count;
scanf("%d",&n);
while(n){
pexi[0].value=0;pexi[0].total=0;
i=1;
while(1){
scanf("%d %d",&pexi[i].value,&count);
if((pexi[i].value==0)&&(count==0)) break;
pexi[i].total=pexi[i-1].total count;
i ;}
b=i-1;
low=pexi[b].total/n;
j=0;
for(i=0;i=1&&(py-1)>=1)
{flag[j]=pexi[i].total-n; j ; }
if((px-1)>=1)
{flag[j]=pexi[i].total 1-n; j ; }
if((px-1)>=1&&(py 1)=1)
{flag[j]=pexi[i].total; j ; }
flag[j]=pexi[i].total 1; j ;
if((py 1)=1)
{flag[j]=pexi[i].total n; j ; }
if((px 1)flag[k]){
int temp=flag[i];
flag[i]=flag[k];
flag[k]=temp;}}}
k=0;
for(i=0;in||i>low) continue;
result=findvalue((i-1)*n j)-findvalue((ix-1)*n iy);
if(resultmax) max=result;
}
}
return max;
}
很巧啊。。去年就做了这么两道ACM,偏偏就选了这道。贴下我的代码吧。。。检查我是Hold不住了。。#include#include using namespace std;const int maxPairs=1000;int inputpic[maxPairs][2]={0};//inputpic[][0]表示像素,inputpic[][1]表示起始位置int outputpic[maxPairs*9][2]={0};int inputNum=0;int outputNum=0;int WIDTH=0;int TotalNum=0;int endPos[2];int getValue(i...全部
很巧啊。。去年就做了这么两道ACM,偏偏就选了这道。贴下我的代码吧。。。检查我是Hold不住了。。#include#include using namespace std;const int maxPairs=1000;int inputpic[maxPairs][2]={0};//inputpic[][0]表示像素,inputpic[][1]表示起始位置int outputpic[maxPairs*9][2]={0};int inputNum=0;int outputNum=0;int WIDTH=0;int TotalNum=0;int endPos[2];int getValue(int loc);int cal(int loc);//计算Loc位置的最大值int cal(int row, int col);//计算(row, col)位置的最大值int getValue(int loc, int row, int col);//专门用来处理越界问题int getInsertInd(int loc);void insert(int temp[2]);//向outputpic中插入新的起始点int main(){freopen("input。
txt", "r", stdin);while (1){scanf("%d", &WIDTH);if (WIDTH==0){break;}int i=0, j=0, total=0;while(scanf("%d %d", &inputpic[i][0], &j)!=EOF){inputpic[i][1]=total;total =j;if (j==0){break;}i ;}inputNum = i;TotalNum = total;endPos[0] = total/WIDTH-1;endPos[1] = WIDTH-1;outputpic[0][0] = cal(0);outputpic[0][1] = 0;outputNum ;int mask[9][2]={{-1,-1},{-1,0},{-1,1},{0, -1},{0, 0},{0,1},{1, -1},{1,0}, {1,1}};int temp[2];int jumpfromRow=-1;int jumptoRow=-1;//-1表示不跳转for (i=0, j=0; i=jumptoRow){jumpfromRow=-1;jumptoRow=-1;}cout=loc && i>=0)i--;return i 1;}void insert(int temp[])//向outputpic中插入新的起始点,temp[0]表示Pixel,temp[1]表示起始位置{int index = getInsertInd(temp[1]);if (indexindex; i--){outputpic[i][0] = outputpic[i-1][0];outputpic[i][1] = outputpic[i-1][1];}outputpic[index][0] = temp[0];outputpic[index][1] = temp[1];outputNum ;}int cal(int row, int col)//计算(row, col)位置的最大值{if (rowendPos[0]||colendPos[1]){return -1;}return cal(row*WIDTH col);}int cal(int loc)//计算Loc位置的最大值{int RCmask[8][2]={{-1,-1},{-1,0},{-1,1},{0, -1},{0,1}, {1, -1},{1,0}, {1,1}};int mask[8]={-WIDTH-1, -WIDTH, -WIDTH 1,-1, 1, WIDTH-1, WIDTH, WIDTH 1};int val=getValue(loc);int result=0;int row = loc/WIDTH;int col = loc%WIDTH;for(int i=0; itemp?result:temp;}}return result;}int getValue(int loc, int row, int col)//专门用来处理越界问题{if (rowendPos[0]||colendPos[1]){return -1;}return getValue(loc);}int getValue(int loc){if (loc=TotalNum){return -1;}int low=0, high = inputNum-1;while(lowloc){return inputpic[mid][0];}elselow=mid 1;}else{high=mid-1;}}return -1;}。
收起