#include <bits/stdc++.h> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int,int>; using pll = pair<ll,ll>; using vi = vector<int>; using vb = vector<bool>; using vc = vector<char>; using vvc = vector<vc>; using vvi = vector<vi>; using vvb = vector<vb>; using vpii = vector<pii>; using vpll = vector<pll>; using vll = vector<ll>; using vvll = vector<vll>; using vull = vector<ull>; #define f first #define s second #define pb emplace_back #define rep(i, begin, end) for(auto i = (begin); i <= (end); ++i) #define repr(i, begin, end) for(auto i = (begin); i >= (end); --i) #define bend(X) X.begin(), X.end() #ifdef LOCAL #define nl << endl #define deb(x) cout << #x << " = " << x << endl #define say(x) cout << x << endl void print() { cout << endl; } #else #define nl << '\n' #define deb(x) #define say(x) void print() { cout << '\n'; } #endif constexpr int INF = 1e9+1e7; constexpr ll INFl = INF; constexpr ll INFll = 1e18+1e16; template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); } template <typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2> x) { os << '(' << x.f << ' ' << x.s << ')'; return os; } template <typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x) { is >> x.f >> x.s; return is; } template <typename T> istream& operator>>(istream& is, vector<T>& x) { for(T& i : x) is >> i; return is; } template <typename T> ostream& operator<<(ostream& os, vector<T>& x) { for(const T& i : x) os << i << ' '; return os; } template <typename T> ostream& operator<<(ostream& os, set<T>& x) { for(const T& i : x) os << i << ' '; return os; } template <typename T1, typename T2> ostream& operator<<(ostream& os, map<T1, T2>& x) { for(const auto& i : x) os << "(" << i.first << " : " << i.second << ") "; return os; } template <typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f+B.f, A.s+B.s}; } template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f-B.f, A.s-B.s}; } template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A) { return {-A.f, -A.s}; } template <typename T1, typename T2> bool maxe(T1& A, const T2& B) { return A<B ? A=B,true : false; } template <typename T1, typename T2> bool mine(T1& A, const T2& B) { return B<A ? A=B,true : false; } // ---------------------------------------------------------------- // ---------------------------------------------------------------- ll n, m, k; vvc T; vvi D; vpii K; bool ok(int i, int j) { return i>=0 && i<n && j>=0 && j<m && T[i][j]=='.' && D[i][j] < 0; } int bfs() { queue<pii> Q; Q.emplace(0,0); D[0][0]=0; while(!Q.empty()) { auto [i,j] = Q.front(); Q.pop(); for(auto [ii,jj] : {pii{-1,0},pii{1,0},pii{0,-1},pii{0,1}}) if(ok(i+ii,j+jj)) Q.emplace(i+ii,j+jj), D[i+ii][j+jj] = D[i][j]+1; } return D[n-1][m-1]; } ll solve() { ll x = (bfs()-(n+m-2))/2; vll R; R.reserve(k); for(auto [a,b] : K) R.pb((n+m-2)*a + x*(a+b)); deb(R); ll a = INFll; int b = 0; for(auto x : R) mine(a,x); for(auto x : R) b += (a==x); print(a,b); return -INF; } void in() { cin >> n >> m >> k; T.resize(n, vc(m)); D.resize(n, vi(m, -1)); K.resize(k); cin >> T >> K; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int noOfTests = 1; //cin >> noOfTests; while(noOfTests --> 0) { in(); ll result = solve(); if (result == ll(-'t')) cout << "TAK\n"; else if(result == ll(-'n')) cout << "NIE\n"; else if(result == ll(-'y')) cout << "YES\n"; else if(result == ll(-'o')) cout << "NO\n"; else if(result == ll(-'e')) cout << "Popsute\n"; else if(result != -INF) cout << result << '\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 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | #include <bits/stdc++.h> using namespace std; using ll = long long; using ull = unsigned long long; using ld = long double; using pii = pair<int,int>; using pll = pair<ll,ll>; using vi = vector<int>; using vb = vector<bool>; using vc = vector<char>; using vvc = vector<vc>; using vvi = vector<vi>; using vvb = vector<vb>; using vpii = vector<pii>; using vpll = vector<pll>; using vll = vector<ll>; using vvll = vector<vll>; using vull = vector<ull>; #define f first #define s second #define pb emplace_back #define rep(i, begin, end) for(auto i = (begin); i <= (end); ++i) #define repr(i, begin, end) for(auto i = (begin); i >= (end); --i) #define bend(X) X.begin(), X.end() #ifdef LOCAL #define nl << endl #define deb(x) cout << #x << " = " << x << endl #define say(x) cout << x << endl void print() { cout << endl; } #else #define nl << '\n' #define deb(x) #define say(x) void print() { cout << '\n'; } #endif constexpr int INF = 1e9+1e7; constexpr ll INFl = INF; constexpr ll INFll = 1e18+1e16; template <typename T, typename... Args> void print(T x, Args... args) { cout << x << ' '; print(args...); } template <typename T1, typename T2> ostream& operator<<(ostream& os, pair<T1,T2> x) { os << '(' << x.f << ' ' << x.s << ')'; return os; } template <typename T1, typename T2> istream& operator>>(istream& is, pair<T1,T2>& x) { is >> x.f >> x.s; return is; } template <typename T> istream& operator>>(istream& is, vector<T>& x) { for(T& i : x) is >> i; return is; } template <typename T> ostream& operator<<(ostream& os, vector<T>& x) { for(const T& i : x) os << i << ' '; return os; } template <typename T> ostream& operator<<(ostream& os, set<T>& x) { for(const T& i : x) os << i << ' '; return os; } template <typename T1, typename T2> ostream& operator<<(ostream& os, map<T1, T2>& x) { for(const auto& i : x) os << "(" << i.first << " : " << i.second << ") "; return os; } template <typename T1, typename T2> pair<T1,T2> operator+(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f+B.f, A.s+B.s}; } template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A, const pair<T1,T2>& B) { return {A.f-B.f, A.s-B.s}; } template <typename T1, typename T2> pair<T1,T2> operator-(const pair<T1,T2>& A) { return {-A.f, -A.s}; } template <typename T1, typename T2> bool maxe(T1& A, const T2& B) { return A<B ? A=B,true : false; } template <typename T1, typename T2> bool mine(T1& A, const T2& B) { return B<A ? A=B,true : false; } // ---------------------------------------------------------------- // ---------------------------------------------------------------- ll n, m, k; vvc T; vvi D; vpii K; bool ok(int i, int j) { return i>=0 && i<n && j>=0 && j<m && T[i][j]=='.' && D[i][j] < 0; } int bfs() { queue<pii> Q; Q.emplace(0,0); D[0][0]=0; while(!Q.empty()) { auto [i,j] = Q.front(); Q.pop(); for(auto [ii,jj] : {pii{-1,0},pii{1,0},pii{0,-1},pii{0,1}}) if(ok(i+ii,j+jj)) Q.emplace(i+ii,j+jj), D[i+ii][j+jj] = D[i][j]+1; } return D[n-1][m-1]; } ll solve() { ll x = (bfs()-(n+m-2))/2; vll R; R.reserve(k); for(auto [a,b] : K) R.pb((n+m-2)*a + x*(a+b)); deb(R); ll a = INFll; int b = 0; for(auto x : R) mine(a,x); for(auto x : R) b += (a==x); print(a,b); return -INF; } void in() { cin >> n >> m >> k; T.resize(n, vc(m)); D.resize(n, vi(m, -1)); K.resize(k); cin >> T >> K; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int noOfTests = 1; //cin >> noOfTests; while(noOfTests --> 0) { in(); ll result = solve(); if (result == ll(-'t')) cout << "TAK\n"; else if(result == ll(-'n')) cout << "NIE\n"; else if(result == ll(-'y')) cout << "YES\n"; else if(result == ll(-'o')) cout << "NO\n"; else if(result == ll(-'e')) cout << "Popsute\n"; else if(result != -INF) cout << result << '\n'; } return 0; } |