Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # include <bits/stdc++.h>
- # define IoS ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL);
- # define Typ long long
- using namespace std;
- long long h, g, pi = 100000000000000ll;
- long long hrr[1010][3], grr[1010][3];
- long long mp_a[3][1010][1010];
- inline long long rast(long long x1, long long y1, long long x2, long long y2)
- {
- return ((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1));
- }
- inline long long ans(int x, int y, int k)
- {
- if((x > h) || (y > g)) return pi;
- long long an;
- an = mp_a[k][x][y];
- if(an != 0) return an;
- if((x == h) && (y == g)){
- if(k == 1) return 0;
- an = rast(hrr[x][1], hrr[x][2], grr[y][1], grr[y][2]);
- }
- if(k == 1){
- if((x == h) && (y != g)) an = pi;
- if(y == g) an = ans(x + 1, y, 1) + rast(hrr[x][1], hrr[x][2], hrr[x + 1][1], hrr[x + 1][2]);
- 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]));
- }
- else {
- if(y == g) an = ans(x + 1, y, 1) + rast(grr[y][1], grr[y][2], hrr[x + 1][1], hrr[x + 1][2]);
- 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]));
- }
- mp_a[k][x][y] = an;
- return an;
- }
- int main()
- {
- IoS; freopen("checklist.in", "r", stdin); freopen("checklist.out", "w", stdout);
- long long i;
- cin >> h >> g;
- for(i = 1; i <= h; i++){
- cin >> hrr[i][1] >> hrr[i][2];
- }
- for(i = 1; i <= g; i++){
- cin >> grr[i][1] >> grr[i][2];
- }
- cout << ans(1, 0, 1);
- return 0;
- }
- /**
- */
Add Comment
Please, Sign In to add comment