#include<bits/stdc++.h>
using namespace std;
string znak;
int odl[2010][2010];
bool tab[2010][2010];
deque<int> kolejkax,kolejkay;
long long mini={5000000000000000};
long long n,m,k,i,j,ilosc,potential,a,b,odp;
int wx,wy;
int Droga(int y, int x)
{
if (tab[y][x]==true)
{
tab[y][x]=false;
//cout<<"juz nie moze być"<<y<<" "<<x<<'\n';
odl[y][x]=odl[wy][wx]+1;
kolejkay.push_back(y);
kolejkax.push_back(x);
}
return 0;
}
int main ()
{
cin>>n>>m>>k;
for (i=1;i<=n;i++)
{
cin>>znak;
for (j=1;j<=m;j++)
{
if (znak[j-1]=='.')
{
tab[i][j]=true;
}
}
}
wx=1;
wy=1;
odl[1][1]=0;
tab[1][1]=false;
while(wy!=n || wx!=m)
{
//cout<<wy<<" "<<wx<<'\n';
//tab[wy][wx]=false;
Droga(wy+1,wx);
Droga(wy-1,wx);
Droga(wy,wx+1);
Droga(wy,wx-1);
wy=kolejkay.front();
wx=kolejkax.front();
kolejkay.pop_front();
kolejkax.pop_front();
}
//cout<<odl[n][m]<<'\n';
odp=(odl[n][m]-(n+m-2));
odp/=2;
for (i=1;i<=k;i++)
{
cin>>a>>b;
potential=(n+m-2)*a+odp*(a+b);
if (potential<=mini)
{
if (potential<mini)
{
ilosc=1;
mini=potential;
}
else
{
ilosc++;
}
}
}
cout<<mini<<" "<<ilosc<<'\n';
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | #include<bits/stdc++.h> using namespace std; string znak; int odl[2010][2010]; bool tab[2010][2010]; deque<int> kolejkax,kolejkay; long long mini={5000000000000000}; long long n,m,k,i,j,ilosc,potential,a,b,odp; int wx,wy; int Droga(int y, int x) { if (tab[y][x]==true) { tab[y][x]=false; //cout<<"juz nie moze być"<<y<<" "<<x<<'\n'; odl[y][x]=odl[wy][wx]+1; kolejkay.push_back(y); kolejkax.push_back(x); } return 0; } int main () { cin>>n>>m>>k; for (i=1;i<=n;i++) { cin>>znak; for (j=1;j<=m;j++) { if (znak[j-1]=='.') { tab[i][j]=true; } } } wx=1; wy=1; odl[1][1]=0; tab[1][1]=false; while(wy!=n || wx!=m) { //cout<<wy<<" "<<wx<<'\n'; //tab[wy][wx]=false; Droga(wy+1,wx); Droga(wy-1,wx); Droga(wy,wx+1); Droga(wy,wx-1); wy=kolejkay.front(); wx=kolejkax.front(); kolejkay.pop_front(); kolejkax.pop_front(); } //cout<<odl[n][m]<<'\n'; odp=(odl[n][m]-(n+m-2)); odp/=2; for (i=1;i<=k;i++) { cin>>a>>b; potential=(n+m-2)*a+odp*(a+b); if (potential<=mini) { if (potential<mini) { ilosc=1; mini=potential; } else { ilosc++; } } } cout<<mini<<" "<<ilosc<<'\n'; return 0; } |
English