View Code of Problem 3933

#include <iostream>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <string>
#include <map>
#include <bitset>

using namespace std;

#define int long long

typedef long long ll;
const ll mod = 1e9 + 7;

pair<double, double> need[500][500];

signed main() {
    int n, m, l, r;
    while (scanf("%lld%lld%lld%lld", &n, &m, &l, &r) != EOF) {
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                int tmp;
                scanf("%lld", &tmp);
                need[i][j] = make_pair(1.0 * l / tmp, 1.0 * r / tmp);
            }
        }
        bool flag = true;
        for (int i = 0; i < n - 1; ++i) {
            pair<double, double> k, tmpk;
            k = make_pair(need[i + 1][0].first / need[i][0].second, need[i + 1][0].second / need[i][0].first);
            for (int j = 1; j < m; ++j) {
                tmpk = make_pair(need[i + 1][j].first / need[i][j].second, need[i + 1][j].second / need[i][j].first);
                k = make_pair(max(k.first, tmpk.first), min(k.second, tmpk.second));
                if (k.first > k.second) {
                    flag = false;
                    break;
                }
            }
            if (!flag) break;
        }
        if (!flag) {
            cout << "NO" << endl;
            return 0;
        }

        for (int i = 0; i < m - 1; ++i) {
            pair<double, double> k, tmpk;
            k = make_pair(need[0][i + 1].first / need[0][i].second, need[0][i + 1].second / need[0][i].first);
            for (int j = 1; j < n; ++j) {
                tmpk = make_pair(need[j][i + 1].first / need[j][i].second, need[j][i + 1].second / need[j][i].first);
                k = make_pair(max(k.first, tmpk.first), min(k.second, tmpk.second));
                if (k.first > k.second) {
                    flag = false;
                    break;
                }
            }
            if (!flag) break;
        }
        if (!flag) {
            cout << "NO" << endl;
            return 0;
        }
        cout << "YES" << endl;
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 3933