Submission #19563865
Source Code Expand
Copy
#include <bits/stdc++.h>
#define repr(i, a, b) for (int i = a; i < b; i++)
#define rep(i, n) for (int i = 0; i < n; i++)
#define reprrev(i, a, b) for (int i = b - 1; i >= a; i--) // [a, b)
#define reprev(i, n) reprrev(i, 0, n)
#define _GLIBCXX_DEBUG
#define int long long
using ll = long long;
using ull = unsigned long long;
template <class T>
inline bool chmax(T &a, T b)
{
if (a < b)
{
a = b;
return true;
}
return false;
}
template <class T>
inline bool chmin(T &a, T b)
{
if (a > b)
{
a = b;
return true;
}
return false;
}
const ll mod = 1e9 + 7;
void chmod(ll &M)
{
if (M >= mod)
M %= mod;
else if (M < 0)
{
M += (abs(M) / mod + 1) * mod;
M %= mod;
}
}
ll modpow(ll x, ll n)
{
if (n == 0)
return 1;
ll res = modpow(x, n / 2);
if (n % 2 == 0)
return res * res % mod;
else
return res * res % mod * x % mod;
}
int getl(int i, int N) { return i == 0 ? N - 1 : i - 1; };
int getr(int i, int N) { return i == N - 1 ? 0 : i + 1; };
long long GCD(long long a, long long b)
{
if (b == 0)
return a;
else
return GCD(b, a % b);
}
using namespace std;
signed main() {
int n, x; cin >> n >> x;
vector<int> X(n+1);
rep(i, n) {
cin >> X[i];
}
X[n] = x;
sort(X.begin(), X.end());
vector<int> res(n);
rep(i, n) {
res[i] = X[i+1] - X[i];
}
sort(res.begin(), res.end());
int ans = res[0];
for(auto x: res) {
ans = GCD(ans, x);
}
cout << ans << endl;
// if(n==1) {
// cout << abs(x-X[0]) << endl;
// return 0;
// }
// auto iter = lower_bound(X.begin(), X.end(), x);
// if(iter == X.end()) {
// cout << abs(x-X[n-1]) << endl;
// return 0;
// }
// int ind = distance(X.begin(), iter);
// int ans = min(abs(x-X[ind]), abs(x-X[ind-1]));
// cout << ans << endl;
}
// int main() {
// int n, m; cin >> n >> m;
// vector<int> X(m);
// rep(i, m) {
// cin >> X[i];
// }
// sort(X.begin(), X.end());
// vector<pair<int, int>> pr;
// for(int i = 0; i < n-1; i++) {
// int res = X[i+1] - X[i];
// pr.emplace_back(res, i);
// }
// sort(pr.begin(), pr.end());
// vector<bool> check(n);
// if(n >= m) {
// cout << 0 << endl;
// return 0;
// }
// for(int i = 0; i < m; i++) {
// check[pr[i].second] = true;
// }
// ll ans;
// rep(i, n) {
// if(pr[i].second==0) continue;
// if(check[pr[i].second]=false) ans += pr[i-1].first;
// }
// cout << ans << endl;
// }
// int main() {
// int n; cin >> n;
// vector<ll> A(n);
// rep(i, n) {
// cin >> A[i];
// }
// sort(A.begin(), A.end());
// int ans = 0;
// int res = A[0];
// for(int i = 1; i < n; i++) {
// res = GCD(res, A[i]);
// }
// ans = res;
// cout << ans << endl;
// }
// int main() {
// int H, W;
// cin >> H >> W;
// vector<vector<char>> c(H, vector<char>(W));
// vector<vector<bool>> check(H, vector<bool>(W));
// void search(int x, int y) {
// if(x < 0 or W <= x or y < 0 or H <= y or c.at(y).at(x)=='#') {
// return;
// }
// if(check.at(y).at(x)) return;
// if(c.at(y).at(x)=='g') goal = true;
// check.at(y).at(x)) = true;
// // 4方向を試す
// search(x+1, y);
// search(x-1, y);
// search(x, y+1);
// search(x, y-1);
// }
// int sx, sy;
// rep(i, H) {
// rep(j, W) {
// check.at(i).at(j) = false;
// cin >> c.at(i).at(j);
// if(c.at(i).at(j) == 's') sx = j, sy = i;
// }
// }
// bool goal = false;
// search(sx, sy);
// if(goal) cout << "Yes" << "\n";
// else cout << "No" << "\n";
// }
// int main() {
// int n;
// cin >> n;
// vector<int> fib(n+1, 0);
// rep(i, n+1) {
// if(i == 0 or i == 1) fib.at(i) == 1;
// else fib.at(i) = fib.at(i-1) + fib.at(i-2);
// }
// cout << fib.at(n) << endl;
// }
// vector<long long> divisor(long long n) {
// vector<long long> ret;
// for (long long i = 1; i * i <= n; i++) {
// if (n % i == 0) {
// ret.push_back(i);
// if (i * i != n) ret.push_back(n / i);
// }
// }
// sort(ret.begin(), ret.end()); // 昇順に並べる
// return ret;
// }
// int main() {
// long long N;
// cin >> N;
// divisor(N);
// ll ans = 0;
// rep(i, divisor(N).size()) {
// ans += divisor(N).at(i);
// }
// cout << ans << "\n";
// }
// int main() {
// struct Heap {
// vector<int> heap;
// Heap() {}
// /*ヒープに値vを挿入*/
// void push(int v) {
// heap.push_back(v);
// int i = (int)heap.size() - 1; //追加されたノード番号
// while(i > 0) {
// int p = (i - 1) / 2; //親のノード番号
// if (heap.at(p) >= v) break; //逆転がなかったらループを抜ける
// heap.at(i) = heap.at(p); //自分のノードを親の値にする
// i = p;
// }
// heap.at(i) = v;
// }
// /* 最大値を知る */
// int top() {
// if(!heap.empty()) return heap.at(0);
// else return -1;
// }
// /* 最大値を知る */
// void top() {
// if (heap.empty()) return;
// int v = heap.back();
// heap.pop_back();
// int i = 0;
// while (i * 2 + 1 < (int)heap.size()) {
// // 子供同士を比較して大きい方をchild1とする
// int child1 = i * 2 + 1, child2 = i * 2 + 2;
// if (child2 < (int)heap.size() && heap.at(child2) > heap.at(child1) child1 = child2;
// if (heap.at(child1) <= v) break; //逆転がない場合は終了
// heap.at(i) = heap.at(child1); //自分のノードを子供の値に
// i = child1;
// }
// heap.at(i) = v; //最終的なvの位置が確定
// }
// };
// int main()
// {
// int N;
// cin >> N;
// vector<tuple<string, int, int>> R;
// rep(i, N)
// {
// string S;
// int a;
// cin >> S >> a;
// R.push_back(make_tuple(S, a, i));
// }
// sort(R.begin(), R.end());
// for (tuple<string, int, int> r : R)
// {
// string s;
// int q;
// int ans;
// tie(s, q, ans) = r;
// cout << ans + 1 << endl;
// }
// }
// }
// /* クイックソートの実装 */
// void Quicksort(vector<int> &a, int left, int right) {
// //終了条件
// if(right - left == 1) return;
// //ピボットに中点を選ぶ
// int pivot_index = (left - right) / 2;
// int pivot = a.at(pivot_index)
// //ピボットと右端を交換
// swap(a.at(right-1), a.at(pivot_index));
// //イテレータ
// int i = left;
// // [left, right)をループ
// repr(j, left, right) {
// //pivot未満のは左へ
// if (a.at(j) < pivot) {
// swap(a.at(i++), a.at(j));
// }
// }
// swap(a.at(i), a.at(j));
// Quicksort(a, left, i);
// Quicksort(a, i+1, right);
// }
// int main() {
// int n;
// cin >> n;
// vector<int> a(n);
// rep(i, n) cin >> a.at(i);
// Quicksort(a, 0, n);
// rep(i, n) printf("%d", a.at(i));
// }
// void Mergesort(vector<int> &a, int left, int right) {
// if(right - left == 1) return;
// int mid = left + (right-left)/2 ;
// Mergesort(a, left, mid);
// Margesort(a, mid, right);
// vector<int> buf;
// repr(i, left, mid) buf.push_back(a.at(i));
// reprrev(i, mid, right) buf.push_back(a.at(i));
// int iterator_left = 0;
// int iterator_right = (int)buf.size();
// repr(i, left, right) {
// if(buf[iterator_left] <= buf[iterator_right]) {
// a.at(i) = buf[iterator_left++];
// }
// else {
// a.at(i) = buf[iterator_right--];
// }
// }
// int main() {
// int n;
// cin >> n;
// rep(i, n) {
// scanf("%d", &a.at(i));
// }
// Mergesort(a, 0, n);
// }
// }
// }
// int main()
// {
// cin.tie(nullptr);
// ios_base::sync_with_stdio(false);
// string S;
// cin >> S;
// string T;
// int N = S.length();
// rep(i, N)
// {
// T.at(N - 1 - i) = S.at(i);
// }
// cerr << T << " " << S;
// //元の文と回文に比較
// int count = 0;
// rep(i, N)
// {
// if (T.at(i) == S.at(i))
// count++;
// }
// cout << count << endl;
// }
// int main()
// {
// int N;
// cin >> N;
// vector<int> W(N);
// rep(i, N)
// {
// cin >> W.at(i);
// }
// const int INF = 1e8;
// vector<int> S(N + 1, 0);
// rep(i, N) S.at(i + 1) = S.at(i) + W.at(i);
// int ans = INF;
// for (int i = 1; i < N - 1; i++)
// {
// int left, right;
// left = S.at(i);
// right = S.at(N) - S.at(i);
// ans = min(ans, abs(right - left));
// }
// cout << ans << endl;
// }
// int main()
// {
// cin.tie(nullptr);
// ios_base::sync_with_stdio(false);
// //入力
// ll A, B, K;
// cin >> A >> B >> K;
// //食べた分枚数を減らしていく
// for (ll i = 0; i < K; i++)
// {
// if (A != 0)
// A--;
// else if (B != 0)
// B--;
// }
// cout << A << " " << B << endl;
// }
Submission Info
Submission Time |
|
Task |
C - Skip |
User |
irohasu19 |
Language |
C++ (GCC 9.2.1) |
Score |
300 |
Code Size |
9443 Byte |
Status |
AC |
Exec Time |
54 ms |
Memory |
4784 KB |
Judge Result
Set Name |
All |
Sample |
Score / Max Score |
300 / 300 |
0 / 0 |
Status |
|
|
Set Name |
Test Cases |
All |
hand_1, large_1, large_2, large_3, large_4, large_5, large_6, large_7, large_8, max_1, max_2, max_3, min_1, min_2, sample_01, sample_02, sample_03, small_1, small_2, small_3, small_4, small_5 |
Sample |
sample_01, sample_02, sample_03 |
Case Name |
Status |
Exec Time |
Memory |
hand_1 |
AC |
6 ms |
3548 KB |
large_1 |
AC |
13 ms |
3644 KB |
large_2 |
AC |
18 ms |
3400 KB |
large_3 |
AC |
13 ms |
3424 KB |
large_4 |
AC |
3 ms |
3412 KB |
large_5 |
AC |
3 ms |
3480 KB |
large_6 |
AC |
2 ms |
3560 KB |
large_7 |
AC |
2 ms |
3408 KB |
large_8 |
AC |
3 ms |
3552 KB |
max_1 |
AC |
53 ms |
4784 KB |
max_2 |
AC |
54 ms |
4604 KB |
max_3 |
AC |
54 ms |
4604 KB |
min_1 |
AC |
3 ms |
3620 KB |
min_2 |
AC |
2 ms |
3408 KB |
sample_01 |
AC |
2 ms |
3408 KB |
sample_02 |
AC |
2 ms |
3424 KB |
sample_03 |
AC |
2 ms |
3600 KB |
small_1 |
AC |
3 ms |
3408 KB |
small_2 |
AC |
2 ms |
3624 KB |
small_3 |
AC |
5 ms |
3620 KB |
small_4 |
AC |
2 ms |
3568 KB |
small_5 |
AC |
3 ms |
3472 KB |