看半天题,而后才发现是统计最大值。ios
int _; int main() { ios_base::sync_with_stdio(false), cin.tie(0); for (cin >> _; _--;) { int n; cin >> n; vector<int> a(n + 1, 0); for (int i = 0, x; i < n; ++i) cin >> x, a[x]++; cout << *max_element(a.begin(), a.end()) << "\n"; } return 0; }
int _; int dp[1010]; bool f(int x, int d) { while (x) { if (x % 10 == d) return true; x /= 10; } return false; } int main() { ios_base::sync_with_stdio(false), cin.tie(0); for (cin >> _; _--;) { int q, x, d; cin >> q >> d; vector<int> v(15, 1e9); for (int i = 1; i <= 100; ++i) { x = i % d; if (f(i, d)) v[x] = min(v[x], i); } for (int i = 1; i <= q; ++i) { cin >> x; if (v[x % d] <= x) cout << "YES\n"; else cout << "NO\n"; } } return 0; }
对d数组排个序,看一个每一个出现的奇偶次数,其实 d 的顺序就是 a(绝对值) 的顺序对应过去的,两组应该是对称出现的。。c++
那能够按顺序求出对应的 a,要是求不出来或者出现重复,那么就失败,不然成功。数组
int _; int main() { ios_base::sync_with_stdio(false), cin.tie(0); for (cin >> _; _--;) { int n; cin >> n; vector<ll> d(2 * n); for (auto& x : d) cin >> x; sort(d.rbegin(), d.rend()); // 注意这里是逆排 bool yn = 1; ll sum = 0; for (int i = 2; i < 2 * n; i += 2) if (d[i] == d[i - 1]) yn = 0; for (int i = 0; i < n && yn; i++) { if (d[2 * i] != d[2 * i + 1]) { yn = 0; break; } if ((d[2 * i] - sum) <= 0 or (d[2 * i] - sum) % (n - i) != 0) { yn = 0; break; } ll cur = (d[2 * i] - sum) / (n - i); if (cur & 1) { yn = 0; break; } sum += cur; } cout << (yn ? "YES\n" : "NO\n"); } return 0; }
\(2*x−y\) x想成 \(x + x − y\) ,也就是x加上x 和y的差值,这个差值能够是正的也能够是负的。执行完以后咱们能够对新的数字继续增长这个差值,因此咱们就能够根据两个数字得出一个等差数列。数列内的数字均可以倍包含在数组a里。spa
而咱们的目的是找出一个最小的差值 \(d\),而后分别比对每个 \(a[i]\)看是否能够由 \(a[i]\)和若干个 \(d\) 获得 k。先对 a 数组排个序,而后对全部的$ a[ i ]− a[ i − 1] $求 gcd
,就得出了那个最小的差值 d。code
// RioTian 21/01/29 #include <bits/stdc++.h> using namespace std; using ll = long long; int _, n; ll k; ll gcd(ll a, ll b) { return a % b == 0 ? b : gcd(b, a % b); } int main() { ios_base::sync_with_stdio(false), cin.tie(0); for (cin >> _; _--;) { cin >> n >> k; vector<ll> a(n + 1); for (int i = 1; i <= n; i++) cin >> a[i]; sort(a.begin() + 1, a.end()); ll tmp = a[2] - a[1]; for (int i = 2; i < n; i++) tmp = gcd(tmp, a[i + 1] - a[i]); ll x = llabs(a[1] - k); cout << (x % tmp == 0 ? "YES\n" : "NO\n"); } return 0; }