讨论 / 为什么不能用abs?CE2次,最后改成手动的,AC
Misha 2013-12-07 15:58:01
点我顶贴 收藏 删除
#include<iostream>

//#include<fstream>

//#include<cmath>

using namespace std;

int sum=0,a[500],x[500],y[500],n,m,k,fr;

int init(){

int i,j,t,fx;

// ifstream cin("peanuts.in");

cin>>n>>m>>k;

for(i=1;i<=n;i++)

for(j=1;j<=m;j++){

sum++;

cin>>a[sum];

x[sum]=i;

y[sum]=j;

}

// cout<<n<<m<<" ";

t=0; fx=10000;

for(i=1;i<=sum;i++)if(t<a[i]){

if(t=a[i]&&fx>x[i]){

fx=x[i];

fr=i;

}

else{

t=a[i];

fr=i;

}

}

k=k-x[fr]-1;

// cout<<k<<" "<<sum<<'\n';

}

int max(int x,int y){

if(x>y) return x;

else return y;

}

int cath(){

int i,tx,ty,ti,now,ans,nx,ny,kx,ky,px,py;

nx=x[fr]; ny=y[fr]; ans=a[fr]; a[fr]=0;

if (k<x[fr]){

ans=0;

k=-1;

}

// cout<<k;

while(k>=0){

now=0;

for(i=1;i<=sum;i++) if(now<a[i]){

now=a[i];

tx=x[i];

ty=y[i];

ti=i;

}

for(i=1;i<=sum;i++) if(now==a[i]&&i!=ti){

// abs(nx-x[i]+ny-y[i])

if(nx<x[i])kx=x[i]-nx;

else kx=nx-x[i];

if(ny<y[i])ky=y[i]-ny;

else ky=ny-y[i];

// abs(nx-tx+ny-ty)

if(nx<tx)px=tx-nx;

else px=nx-tx;

if(ny<ty)py=ty-ny;

else py=ny-ty;

// abs erro

if((kx+ky)<(px+py)){

tx=x[i];

ty=y[i];

ti=i;

}

}

// abs(nx-tx+ny-ty)

if(nx<tx)px=tx-nx;

else px=nx-tx;

if(ny<ty)py=ty-ny;

else py=ny-ty;

if(k-(px+py)-tx-1>=0){

ans=ans+now;

a[ti]=0;

k=k-(px+py)-1;

nx=tx; ny=ty;

}

else break;

if (now==0) break;

}

// ofstream cout("output.out");

cout<<ans;

}

int main(){

init();

cath();

return 0;

}

查看更多回复
提交回复