1 solutions
-
0
C :
#include<stdio.h> int sum,n,m,k,fr; int a[500],x[500],y[500]; inline int max(int x,int y){ return x>y?x:y; } inline int abs(int x){ return x>=0?x:(-x); } int init(){ int i,j,t,fx; scanf("%d%d%d",&n,&m,&k); for(i=1;i<=n;i++) for(j=1;j<=m;j++){ sum++; scanf("%d",&a[sum]); x[sum]=i; y[sum]=j; } 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-=x[fr]+1; } int work(){ 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; } 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){ kx=abs(nx-x[i]); ky=abs(ny-y[i]); px=abs(nx-tx); py=abs(ny-ty); if((kx+ky)<(px+py)){ tx=x[i]; ty=y[i]; ti=i; } } px=abs(nx-tx); py=abs(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; } printf("%d",ans); } int main() { // freopen("peanuts.in","r",stdin); // freopen("peanuts.out","w",stdout); init(); work(); return 0; }C++ :
#include<iostream> #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; 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; } 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-=x[fr]+1; } int max(int x,int y) { if(x>y) return x; 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; } 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) { kx=abs(nx-x[i]); ky=abs(ny-y[i]); px=abs(nx-tx); py=abs(ny-ty); if((kx+ky)<(px+py)) { tx=x[i]; ty=y[i]; ti=i; } } px=abs(nx-tx); py=abs(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; } cout<<ans; } int main() { init(); cath(); return 0; }Pascal :
var t,m,n,k,max,i,j,max1i,max1j,maxi,maxj,total:integer; p:array[1..20,1..20] of integer; begin readln(m,n,k); k:=k-2; max:=0; for i:=1 to m do for j:=1 to n do begin read(p[i,j]); if p[i,j]>max then begin max:=p[i,j]; max1i:=i; max1j:=j; end; end; t:=max1i;total:=0; while (t+max1i-1<=k) and (max>0) do begin p[max1i,max1j]:=0; total:=total+max; max:=0; for i:=1 to m do for j:=1 to n do if p[i,j]>max then begin max:=p[i,j]; maxi:=i; maxj:=j; end; t:=t+1+abs(max1i-maxi)+abs(max1j-maxj); max1i:=maxi;max1j:=maxj; end; writeln(total); end.
- 1
Information
- ID
- 20035
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By