Pagini recente » Cod sursa (job #2999971) | Cod sursa (job #1491415) | Cod sursa (job #1649929) | Cod sursa (job #2904415) | Cod sursa (job #2300888)
#include <bits/stdc++.h>
using namespace std;
queue <int> q1,q2;
vector <int> v[3001];
ifstream f("ocean14.in");
ofstream g("ocean14.out");
int n,k,i,j,p1,L,nr,t,suma,T,lungime,p2,I,J,s1[5],s2[5],s3[5],s4[5],b[60][60],a[60][60],A[60][60],c[60][60];
void reconstit (int i,int j,int lungime)
{
if(lungime>=1)
{
A[i][j]++;
if(b[i-1][j]==lungime-1)reconstit(i-1,j,lungime-1);
if(b[i+1][j]==lungime-1)reconstit(i+1,j,lungime-1);
if(b[i][j+1]==lungime-1)reconstit(i,j+1,lungime-1);
if(b[i][j-1]==lungime-1)reconstit(i,j-1,lungime-1);
}
}
int main()
{
f>>n>>k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
f>>a[i][j];
c[i][j]=a[i][j];
}
q1.push(1);
q2.push(1);
b[1][1]=1;
a[1][1]=0;
while(!q1.empty())
{
p1=q1.front();
p2=q2.front();
if(a[p1+1][p2]!=0){q1.push(p1+1);q2.push(p2);a[p1+1][p2]=0;b[p1+1][p2]=b[p1][p2]+1;}
if(a[p1-1][p2]!=0){q1.push(p1-1);q2.push(p2);a[p1-1][p2]=0;b[p1-1][p2]=b[p1][p2]+1;}
if(a[p1][p2+1]!=0){q1.push(p1);q2.push(p2+1);a[p1][p2+1]=0;b[p1][p2+1]=b[p1][p2]+1;}
if(a[p1][p2-1]!=0){q1.push(p1);q2.push(p2-1);a[p1][p2-1]=0;b[p1][p2-1]=b[p1][p2]+1;}
q1.pop();
q2.pop();
}
lungime=b[n][n];
L=lungime;
reconstit(n,n,lungime);
T=A[1][1];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(A[i][j]!=0)A[i][j]=T-A[i][j]+1;
// g<<L<<'\n';
lungime=1;
nr=1;
i=1;j=1;
while(lungime<=L)
{
t=0;
// cout<<i<<" "<<j<<'\n';
// cout<<lungime<<" "<<i<<" "<<j<<'\n';
if(b[i+1][j]==lungime+1){t++;s1[t]=A[i+1][j];s2[t]=c[i+1][j];s3[t]=i+1;s4[t]=j;}
if(b[i-1][j]==lungime+1){t++;s1[t]=A[i-1][j];s2[t]=c[i-1][j];s3[t]=i-1;s4[t]=j;}
if(b[i][j+1]==lungime+1){t++;s1[t]=A[i][j+1];s2[t]=c[i][j+1];s3[t]=i;s4[t]=j+1;}
if(b[i][j-1]==lungime+1){t++;s1[t]=A[i][j-1];s2[t]=c[i][j-1];s3[t]=i;s4[t]=j-1;}
for(I=1;I<=t;I++)
{
for(J=I+1;J<=t;J++)
if(s1[I]>s1[J])
{
swap(s1[I],s1[J]);
swap(s2[I],s2[J]);
swap(s3[I],s3[J]);
swap(s4[I],s4[J]);
}
}
suma=0;
for(I=1;I<=t;I++)
{
suma=suma+s1[I];
// cout<<suma<<" ";
if(suma>=k){break;}
}
// cout<<'\n';
g<<c[i][j]<<" ";
// cout<<'\n';
i=s3[I];
j=s4[I];
lungime++;
}
return 0;
}