Pagini recente » Cod sursa (job #2602620) | Cod sursa (job #2209837) | Cod sursa (job #2705781) | Cod sursa (job #41427) | Cod sursa (job #1961203)
#include <cstdio>
#include <algorithm>
#include <string>
using namespace std;
#define BUF_MAX (1<<18)
char buf[BUF_MAX];
int poz=BUF_MAX;
inline char GetChar(){
if(poz==BUF_MAX){
fread(buf,1,BUF_MAX,stdin);
poz=0;
}
return buf[poz++];
}
inline int GetInt(){
int x=0;char c;
do{
c=GetChar();
}while(!isdigit(c));
do{
x=x*10+c-'0';
c=GetChar();
}while(isdigit(c));
return x;
}
int n,caz,k,r,mic,m;
struct usu
{
int x,y,s;
}v[250003];
bool cmp(usu a,usu b)
{
if(a.s>b.s) return 0;
if(a.s==b.s&&a.x>b.x) return 0;
if(a.s==b.s&&a.x==b.x&&a.y>b.y) return 0;
return 1;
}
void solve()
{
int i,rege;
long num;
rege=0;
r=1;
num=k;
mic=v[1].s;
i=1;
while(r<n*m&®e<k)
{
while(i<n*m&&v[i+1].s==v[i].s) ++i;
if(i<n*m) rege=rege+i*(v[i+1].s-v[i].s);
else rege=k;
if(rege<k)
{
r=i;
num=k-rege;
++i;
mic=v[i].s;
}
}
if(i<=num) r=i;
else if(r<num) r=num;
mic=mic+num/i;
}
int main()
{
freopen("rascoala.in","r",stdin);
freopen("rascoala.out","w",stdout);
caz=GetInt();
n=GetInt();
m=GetInt();
k=GetInt();
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
{
v[(i-1)*m+j].s=GetInt();
v[(i-1)*m+j].x=i;
v[(i-1)*m+j].y=j;
}
}
v[n*m+1].s=2000000005;
sort(v+1,v+n*m+1,cmp);
solve();
if(caz==1) printf("%d\n%d",r,mic);
else
{
int sol=0,usu;
for(int i=1;i<r;++i)
{
for(int j=1;j<=r;++j)
{
usu=abs(v[i].x-v[j].x)+abs(v[i].y-v[j].y);
if(usu>sol) sol=usu;
}
}
printf("%d",sol);
}
return 0;
}