結果

提出番号 1005
提出者 kotamanegi
言語 C++
提出日時 2017-08-05 23:14:12
問題名 (44)玉ねぎの収穫をするkotamanegi
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 60ms 26144KB
2 AC 100% 57ms 32448KB
3 WA 0% 115ms 44464KB
4 WA 0% 127ms 53536KB
5 WA 0% 84ms 36624KB
6 WA 0% 267ms 69232KB
7 WA 0% 6ms 11152KB
8 WA 0% 169ms 41952KB
9 WA 0% 106ms 48112KB
10 AC 100% 117ms 42112KB
11 AC 100% 84ms 31888KB
12 WA 0% 22ms 25408KB
13 WA 0% 148ms 58240KB
14 AC 100% 46ms 29696KB
15 WA 0% 331ms 73248KB
16 WA 0% 12ms 13584KB
17 AC 100% 76ms 34048KB
18 WA 0% 106ms 44848KB
19 WA 0% 102ms 51456KB
20 WA 0% 14ms 17648KB

ソースコード

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <algorithm>
#include <utility>
#include <functional>
#include <cstring>
#include <queue>
#include <stack>
#include <math.h>
#include <iterator>
#include <vector>
#include <string>
#include <set>
#include <math.h>
#include <iostream> 
#include <random>
#include<map>
#include <iomanip>
#include <time.h>
#include <stdlib.h>
#include <list>
#include <typeinfo>
#include <list>
#include <set>
#include <cassert>
#include<fstream>
#include <unordered_map>  
using namespace std;
#define eps 0.00000001
#define LONG_INF 10000000000000000
#define GOLD 1.61803398874989484820458
#define MAX_MOD 1000000007
#define f(n) for(int i=0;i<n;++i)
#define REP(i,n) for(long long i = 0;i < n;++i)
long long dp[2000][2000] = {};
bool done[2000][2000] = {};
long long y[2000] = {}, x[2000] = {};
int main() {
#define int long long
	int h, w;
	cin >> h >> w;
	REP(i, h) {
		REP(q, w) {
			dp[i+1][q+1] = LONG_INF;
		}
	}
	dp[1][1] = 0;
	int y_dis, x_dis;
	cin >> y_dis >> x_dis;
	REP(i, h) {
		cin >> y[i+1];
	}
	REP(i, w) {
		cin >> x[i+1];
	}
	long long a, b, c, d;
	cin >> a >> b >> c >> d;
	for (int i = a;i <= b;++i) {
		for (int q = c;q <= d;++q) {
			done[q][i] = 1;
		}
	}
	for (int i = 0;i < h+w;++i) {
		done[0][i] = 1;
		done[i][0] = 1;
		done[h+1][i] = 1;
		done[i][w + 1] = 1;
	}
	priority_queue<tuple<int, int,int>, vector<tuple<int,int, int>>, greater<tuple<int,int, int>>> hoge;
	hoge.push(make_tuple(0, 1, 1));
	while (hoge.empty() == false) {
		tuple<int, int, int> wow = hoge.top();hoge.pop();
		if (done[get<1>(wow)][get<2>(wow)] == false) {
			done[get<1>(wow)][get<2>(wow)] = true;
			if (get<1>(wow) < h) {
				if (done[get<1>(wow) + 1][get<2>(wow)] == false && dp[get<1>(wow) + 1][get<2>(wow)] > get<0>(wow) + y[get<2>(wow)]) {
					dp[get<1>(wow) + 1][get<2>(wow)] = get<0>(wow) + y[get<2>(wow)];
					hoge.push(make_tuple(dp[get<1>(wow) + 1][get<2>(wow)], get<1>(wow) + 1, get<2>(wow)));
				}
			}
			if (get<1>(wow) >= 2) {
				if (done[get<1>(wow) - 1][get<2>(wow)] == false && dp[get<1>(wow) - 1][get<2>(wow)] > get<0>(wow) + y[get<2>(wow)]) {
					dp[get<1>(wow) - 1][get<2>(wow)] = get<0>(wow) + y[get<2>(wow)];
					hoge.push(make_tuple(dp[get<1>(wow) - 1][get<2>(wow)], get<1>(wow) - 1, get<2>(wow)));
				}
			}
			if (get<2>(wow) < w) {
				if (done[get<1>(wow)][get<2>(wow)+1] == false && dp[get<1>(wow)][get<2>(wow)+1] > get<0>(wow) + x[get<1>(wow)]) {
					dp[get<1>(wow)][get<2>(wow)+1] = get<0>(wow) + x[get<1>(wow)];
					hoge.push(make_tuple(dp[get<1>(wow)][get<2>(wow)+1], get<1>(wow), get<2>(wow)+1));
				}
			}
			if (get<2>(wow) > 1) {
				if (done[get<1>(wow)][get<2>(wow) - 1] == false && dp[get<1>(wow)][get<2>(wow) - 1] > get<0>(wow) + x[get<1>(wow)]) {
					dp[get<1>(wow)][get<2>(wow) - 1] = get<0>(wow) + x[get<1>(wow)];
					hoge.push(make_tuple(dp[get<1>(wow)][get<2>(wow) - 1], get<1>(wow), get<2>(wow) - 1));
				}
			}
		}
	}
	if (dp[x_dis][y_dis] != LONG_INF) {
		cout << dp[x_dis][y_dis] << endl;
	}
	else {
		cout << -1 << endl;
	}
}