結果

提出番号 587
提出者 olphe
言語 C++
提出日時 2017-07-26 00:48:31
問題名 (44)玉ねぎの収穫をするkotamanegi
結果 CE
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 CE 0% 0ms 0KB
2 CE 0% 0ms 0KB
3 CE 0% 0ms 0KB
4 CE 0% 0ms 0KB
5 CE 0% 0ms 0KB
6 CE 0% 0ms 0KB
7 CE 0% 0ms 0KB
8 CE 0% 0ms 0KB
9 CE 0% 0ms 0KB
10 CE 0% 0ms 0KB
11 CE 0% 0ms 0KB
12 CE 0% 0ms 0KB
13 CE 0% 0ms 0KB
14 CE 0% 0ms 0KB
15 CE 0% 0ms 0KB
16 CE 0% 0ms 0KB
17 CE 0% 0ms 0KB
18 CE 0% 0ms 0KB
19 CE 0% 0ms 0KB
20 CE 0% 0ms 0KB

ソースコード

#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "math.h"
#include "utility"
#include "string"
#include "map"
#include "unordered_map"
#include "iomanip"
#include "random"

using namespace std;

const int N = 20;

int main() {
	//std::random_device rnd;	// 乱数生成機
	//std::mt19937 mt(rnd());
	//FILE *ifile[N];
	//FILE *ofile[N];
	//
	//for (int i = 0; i < N; i++) {
	//	char s[100] = {};
	//	char t[100] = {};
	//	sprintf(s, "input/%d.txt", i + 1);
	//	ifile[i] = fopen(s, "w");
	//	sprintf(t, "output/%d.txt", i + 1);
	//	ofile[i] = fopen(t, "w");
	//}
//	for (int i = 0; i < N; i++) {
		int H, W;
		cin >> H >> W;
		int y, x;
		cin >> y >> x;
		int cost_y[1001] = {};
		int cost_x[1001] = {};
		for (int j = 1; j <= H; j++)cin >> cost_y[j];
		for (int j = 1; j <= W; j++)cin >> cost_x[j];
		int yl, yr, xl, xr;
		cin >> yl >> yr >> xl >> xr;
		int dis[1002][1002] = {};
		bool flag[1002][1002] = {};
		for (int j = 1; j <= H; j++) {
			for (int k = 1; k <= W; k++) {
				dis[j][k] = INT_MAX;
				flag[j][k] = true;
			}
		}
		for (int j = yl; j <= yr; j++) {
			for (int k = xl; k <= xr; k++) {
				flag[j][k] = false;
			}
		}
		priority_queue < pair<int, pair<int, int>>, vector < pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>>Q;
		Q.push({ 0,{ 1,1 } });
		while (!Q.empty()) {
			int cy, cx, c;
			c = Q.top().first;
			cy = Q.top().second.first;
			cx = Q.top().second.second;
			Q.pop();
			if (dis[cy][cx] <= c)continue;
			dis[cy][cx] = c;
		//	cout << cy << " " << cx << " " << c << endl;
			if (cy == y&&cx == x)break;
			if (flag[cy + 1][cx]) {
				if (c + cost_x[cx] < dis[cy + 1][cx])Q.push({ c + cost_x[cx] ,{cy + 1,cx} });
			}
			if (flag[cy - 1][cx]) {
				if (c + cost_x[cx] < dis[cy - 1][cx])Q.push({ c + cost_x[cx] ,{ cy - 1,cx } });
			}
			if (flag[cy][cx + 1]) {
				if (c + cost_y[cy] < dis[cy][cx + 1])Q.push({ c + cost_y[cy] ,{ cy,cx + 1 } });
			}
			if (flag[cy][cx - 1]) {
				if (c + cost_y[cy] < dis[cy][cx - 1])Q.push({ c + cost_y[cy] ,{ cy,cx - 1 } });
			}
		}
		if(dis[y][x]==INT_MAX)cout<<"-1\n":
		else cout << dis[y][x] << endl;
//	}
	return 0;
}