UVa12269 Lawn mower
解法
位置をソートして、隣との幅が W 以内かを見ていく、かつ芝を端まで刈れているかを調べるだけ。
#include <bits/stdc++.h> using namespace std; #define REP(i,a,b) for(int i=a;i<(int)b;i++) #define rep(i,n) REP(i,0,n) #define allof(c) (c).begin(), (c).end() double const MAX_L = 75.; double const MAX_W = 100.; bool solve(vector<double> const &VEC, double K, double MAX) { if( VEC[0]-K/2. > 0. || VEC.back() + K/2. < MAX) { return false; } bool ret = true; REP(i,1,VEC.size()) { ret = ret && (VEC[i]-VEC[i-1] <= K); } return ret; } int main() { int N, M; double K; while(cin >> N >> M >> K && N) { vector<double> LEN(N), WIDTH(M); rep(i, N) cin >> LEN[i]; rep(i, M) cin >> WIDTH[i]; sort(allof(LEN)); sort(allof(WIDTH)); if( solve(LEN, K, MAX_L) && solve(WIDTH, K, MAX_W) ) { cout << "YES" << endl; } else { cout << "NO" << endl; } } return 0; }