Guest User

Kodi zadachai B 8/10 usaco 19.12.2016 Div.Gold

a guest
Dec 19th, 2016
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. # include <bits/stdc++.h>
  2. # define IoS ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
  3. # define Typ long long
  4.   using namespace std;
  5.   long long h, g, pi = 100000000000000ll;
  6.   long long hrr[1010][3], grr[1010][3];
  7.   long long mp_a[3][1010][1010];
  8.   inline long long rast(long long x1, long long y1, long long x2, long long y2)
  9.   {
  10.       return ((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1));
  11.   }
  12.   inline long long ans(int x, int y, int k)
  13.   {
  14.       if((x > h) || (y > g)) return pi;
  15.       long long an;
  16.       an = mp_a[k][x][y];
  17.       if(an != 0) return an;
  18.       if((x == h) && (y == g)){
  19.         if(k == 1) return 0;
  20.         an = rast(hrr[x][1], hrr[x][2], grr[y][1], grr[y][2]);
  21.       }
  22.       if(k == 1){
  23.         if((x == h) && (y != g)) an = pi;
  24.         if(y == g) an = ans(x + 1, y, 1) + rast(hrr[x][1], hrr[x][2], hrr[x + 1][1], hrr[x + 1][2]);
  25.         an = min(ans(x + 1, y, 1) + rast(hrr[x][1], hrr[x][2], hrr[x + 1][1], hrr[x + 1][2]), ans(x, y + 1, 2) + rast(hrr[x][1], hrr[x][2], grr[y + 1][1], grr[y + 1][2]));
  26.       }
  27.       else {
  28.         if(y == g) an = ans(x + 1, y, 1) + rast(grr[y][1], grr[y][2], hrr[x + 1][1], hrr[x + 1][2]);
  29.         an = min(ans(x, y + 1, 2) + rast(grr[y][1], grr[y][2], grr[y + 1][1], grr[y + 1][2]), ans(x + 1, y, 1) + rast(grr[y][1], grr[y][2], hrr[x + 1][1], hrr[x + 1][2]));
  30.       }
  31.       mp_a[k][x][y] = an;
  32.       return an;
  33.   }
  34.   int main()
  35.   {
  36.       IoS; freopen("checklist.in", "r", stdin); freopen("checklist.out", "w", stdout);
  37.       long long i;
  38.       cin >> h >> g;
  39.       for(i = 1; i <= h; i++){
  40.         cin >> hrr[i][1] >> hrr[i][2];
  41.       }
  42.       for(i = 1; i <= g; i++){
  43.         cin >> grr[i][1] >> grr[i][2];
  44.       }
  45.       cout << ans(1, 0, 1);
  46.       return 0;
  47.   }
  48. /**
  49. */
Add Comment
Please, Sign In to add comment