1 solutions

  • 0
    @ 2025-11-5 20:07:39

    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