# HackerEarth Three arrays problem solution

In this HackerEarth Three arrays problem solution You are given three arrays a1...n, b1...n, c1...n and two numbers M and K. Find a lexicographically minimum {x,y,z} such that there are exactly K indices i(1 <= i <= n) where x * ai + y * bi - ci * z = M * f for some integer f. Also, you are given ranges of x, y, and z -- l1..3, r1...3 ((l1 <= x <= r1, l2 <= y <= r2, l3 <= z <= r3. Here, a triplet of integers {x1, y1, z1} is considered to be lexicographically smaller than a triplet {x2, y2, z2} if sequence [x1, y1, z1] is lexicographically smaller than sequence [x2, y2, z2] A sequence a is lexicographically smaller than a sequence b if in the first position where a and b differ, the sequence a has a smaller element than the corresponding element in b.

## HackerEarth Three arrays problem solution.

`#include <bits/stdc++.h> #define mp make_pair#define pb push_back#define f first#define s second#define ll long long#define forn(i, a, b) for(int i = (a); i <= (b); ++i)#define forev(i, b, a) for(int i = (b); i >= (a); --i)#define VAR(v, i) __typeof( i) v=(i)#define forit(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)#define all(x) (x).begin(), (x).end()#define sz(x) ((int)(x).size())#define file(s) freopen(s".in","r",stdin); freopen(s".out","w",stdout); using namespace std; const int maxn = (int)1e6 + 100;const int mod = (int)1e9 + 7;const int P = (int) 1e6 + 7; const double pi = acos(-1.0);#define inf mod typedef long double ld;typedef pair<int, int> pii;typedef pair<ll, ll> pll;typedef vector<int> vi;   typedef vector<ll> Vll;               typedef vector<pair<int, int> > vpii;typedef vector<pair<ll, ll> > vpll;                        int n, m, k, a[maxn], b[maxn], c[maxn], l[4], r[4];inline int sum(int a, int b){    a += b;    if(a >= m) a -= m;    if(a < 0) a += m;    return a;}inline int mult(int a, int b){    return a * 1ll * b % m;}void solve(){  cin >> n >> m >> k;  forn(i, 1, n) cin >> a[i] >> b[i] >> c[i];  forn(i, 1, 3) cin >> l[i] >> r[i];  forn(x, l[1], min(r[1], l[1] + m - 1))    forn(y, l[2], min(r[2], l[2] + m - 1))      forn(z, l[3], min(r[3], l[3] + m - 1)){        int cnt = 0;        forn(i, 1, n){          if(!sum(sum(mult(a[i], x), mult(b[i], y)), m - mult(c[i], z)))            cnt++;          if(cnt > k) break;        }        if(cnt == k){          cout << x << " "  << y << " " << z << endl;          exit(0);        }      }  puts("-1");}main () {  int t = 1;  //scanf("%d", &t);  while(t--)    solve(); }     `

### Second solution

`#include <bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 1e4 + 14;int n, m, k, a[maxn], b[maxn], c[maxn], l[maxn], r[maxn];int main(){    ios::sync_with_stdio(0), cin.tie(0);    cin >> n >> m >> k;    for(int i = 0; i < n; i++)        cin >> a[i] >> b[i] >> c[i];    for(int i = 0; i < 3; i++)        cin >> l[i] >> r[i];    for(int i = l[0]; i <= min(l[0] + m, r[0]); i++)        for(int j = l[1]; j <= min(l[1] + m, r[1]); j++)            for(int k = l[2]; k <= min(l[2] + m, r[2]); k++){                int cnt = 0;                for(int l = 0; l < n; l++)                    cnt += ((ll) i * a[l] + (ll) j * b[l] - (ll) k * c[l]) % m == 0;                cerr << cnt << '\n';                if(cnt == ::k)                    return cout << i << ' ' << j << ' ' << k << '\n', 0;             }    cout << "-1\n";}`