| 比赛 | 防止浮躁的小练习v0.4 | 评测结果 | AAAAAAAAAA | 
    | 题目名称 | 走出金字塔 | 最终得分 | 100 | 
    | 用户昵称 | Fmuckss | 运行时间 | 0.011 s | 
    | 代码语言 | C++ | 内存使用 | 0.31 MiB | 
    | 提交时间 | 2016-10-13 18:54:40 | 
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
const int inf = 2e9;
inline int cal(int dx, int dy) {
	int ans = 2;
	ans += (dx - 1) * 2;
	ans += max(0, dy - (dx - 1));
	return ans;
}
int n, m, k, s;
int xa, xb;
inline void solve() {
	scanf("%d %d %d %d", &n, &m, &k, &s);
	scanf("%d %d", &xa, &xb);
	
	int frx, fry, tox, toy, ans = inf, x, y;
	for (int i = 1; i <= m; i++) {
		scanf("%d %d", &x, &y);
		frx = xa, fry = xb, tox = x, toy = y;
		y = fry;
			
		if (frx > tox) {
			swap(frx, tox);
			swap(fry, toy);
			y = fry;
		}
		
		if (not (fry & 1)) {
			if (toy & 1) {
				toy++;
				if (toy <= tox * 2 - 1) {
					fry++;
					if (fry <= frx * 2 - 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 2); 
					fry -= 2;
					if (fry >= 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 2); 
				}
				fry = y;
				toy -= 2;
				if (toy >= 1) {
					fry++;
					if (fry <= frx * 2 - 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 2); 
					fry -= 2;
					if (fry >= 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 2); 
				}
			} else {
				fry++;
				if (fry <= frx * 2 - 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 1); 
				fry -= 2;
				if (fry >= 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 1); 
			}
		} else {
			if (toy & 1) {
				toy++;
				if(toy <= tox * 2 - 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 1); 
				toy -= 2;
				if (toy >= 1) ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx))) + 1); 
			} else {
				ans = min(ans, cal(tox - frx, abs((toy - tox) - (fry - frx)))); 
			}
		}
	}
	
	printf("%d\n", s - ((ans - 1) * k + 1) < 0 ? -1 : s - ((ans - 1) * k + 1));
}
int main() {
	freopen("ha14c.in", "r", stdin);
	freopen("ha14c.out", "w", stdout);
	solve();
	return 0;
}