Problem p03651 (C++)

Buggy submission (status: Runtime Error):

// Problem : A - Getting Difference
// Contest : AtCoder - AtCoder Grand Contest 018
// URL : https://atcoder.jp/contests/agc018/tasks/agc018_a
// Memory Limit : 256 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, b, a) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto &a : x)

#define bug(x) cout << #x << "=" << x << endl;
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template <class T> bool ckmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const ld pii = 3.14159265359;
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 200001; // check the limits, dummy
string as[] = {"POSSIBLE", "IMPOSSIBLE"};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int N, K;
  cin >> N >> K;
  vi v(N);
  F0R(x, N)
  cin >> v[x];
  sort(all(v));
  if (v.back() < K) {
    cout << as[1] << nl;
    return 0;
  }
  if (binary_search(all(v), K)) {
    cout << as[0] << nl;
    return 0;
  }
  int mn = v[0];
  F0R(x, N - 1) { ckmin(mn, v[x + 1] - v[x]); }
  F0R(x, N) {
    if (v[x] <= K)
      continue;
    if ((v[x] - K) % mn == 0) {
      cout << as[0] << nl;
      return 0;
    }
  }
  cout << as[1] << nl;
  return 0;
}

// read the question correctly (ll vs int)
// template by bqi343

Fixed submission:

// Problem : A - Getting Difference
// Contest : AtCoder - AtCoder Grand Contest 018
// URL : https://atcoder.jp/contests/agc018/tasks/agc018_a
// Memory Limit : 256 MB
// Time Limit : 2000 ms
// Powered by CP Editor (https://github.com/cpeditor/cpeditor)

#pragma GCC optimize("O3")
#pragma GCC target("sse4")

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;

typedef pair<int, int> pi;
typedef pair<ll, ll> pl;
typedef pair<ld, ld> pd;

typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;

#define FOR(i, a, b) for (int i = a; i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define FORd(i, b, a) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i, a) for (int i = (a)-1; i >= 0; i--)
#define trav(a, x) for (auto &a : x)

#define bug(x) cout << #x << "=" << x << endl;
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template <class T> bool ckmin(T &a, const T &b) { return b < a ? a = b, 1 : 0; }
template <class T> bool ckmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; }

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

const ld pii = 3.14159265359;
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 200001; // check the limits, dummy
string as[] = {"POSSIBLE", "IMPOSSIBLE"};
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  int N, K;
  cin >> N >> K;
  vi v(N);
  F0R(x, N)
  cin >> v[x];
  sort(all(v));
  if (v.back() < K) {
    cout << as[1] << nl;
    return 0;
  }
  if (binary_search(all(v), K)) {
    cout << as[0] << nl;
    return 0;
  }
  int mn = v[0];
  F0R(x, N - 1) { ckmin(mn, v[x + 1] - v[x] == 0 ? INT_MAX : v[x + 1] - v[x]); }
  F0R(x, N) {
    if (v[x] <= K)
      continue;
    if ((v[x] - K) % mn == 0) {
      cout << as[0] << nl;
      return 0;
    }
  }
  cout << as[1] << nl;
  return 0;
}

// read the question correctly (ll vs int)
// template by bqi343