比賽地址c++
題目連接
⭐數組
題目:
給出一個非嚴格單調遞增的序列,分割成儘量少的嚴格單調遞增序列spa
解析:
因爲所給序列是非嚴格單調遞增的,因此假如對這個序列進行去重,那麼就已是一個嚴格單調遞增的序列了,那麼重複次數最多的元素,就決定了分割的最小數目3d
#include<bits/stdc++.h> #define MEM(X,Y) memset(X,Y,sizeof(X)) typedef long long LL; using namespace std; /*===========================================*/ int vis[105]; int main() { int T; scanf("%d", &T); while (T--) { MEM(vis, 0); int ret = 0; int n; scanf("%d", &n); int t; for (int i = 0; i < n; ++i) { scanf("%d", &t); ret = max(ret, ++vis[t]); } printf("%d\n", ret); } }
題目連接
⭐⭐code
題目:
給出\(d(1\le d\le 9)\)與\(k\),詢問是否能夠由若干個數中含有\(d\)的數累加得到\(k\)排序
解析:隊列
#include<bits/stdc++.h> using namespace std; int main() { int T; scanf("%d", &T); while (T--) { int q, t, d; scanf("%d%d", &q, &d); while (q--) { scanf("%d", &t); if (t >= d * 10) printf("YES\n"); else { t -= d; while (t >= 0 && t % 10) t -= d; printf("%s\n", t < 0 ? "NO" : "YES"); } } } }
題目連接
⭐⭐⭐get
題目:
給出一個長度爲\(2n\)序列,問是否存在另外一個序列\(dat\),使得每一個元素\(d[i]=\sum_{j=1}^n|dat[i]-dat[j]|\),且若存在\(dat[i]\)必有\(dat[i]+dat[j]=0\),\(dat\)中每一個元素互不相同it
解析:io
#include<bits/stdc++.h> typedef long long LL; using namespace std; /*===========================================*/ const int maxn = 1e5 + 5; set<long long, greater<long long>> s; unordered_map<long long, int> m; LL cnt, sum; int main() { int T; LL t; scanf("%d", &T); while (T--) { m.clear(); s.clear(); int n; bool ok = true; sum = cnt = 0; scanf("%d", &n); for (int i = 0; i < 2 * n; ++i) { scanf("%lld", &t); if (t & 1 || m[t] == 2) ok = false; if (!ok) continue; if (m[t]) ++cnt; else s.insert(t); ++m[t]; } if (cnt != n || !ok) { printf("NO\n"); continue; } while (!s.empty()) { t = *s.begin() / 2; s.erase(s.begin()); t -= sum; if (t <= 0 || t % cnt) { ok = false; break; } sum += t / cnt; --cnt; } if (ok) printf("YES\n"); else printf("NO\n"); } }
題目連接
⭐⭐⭐⭐
題目:
給出一個數組,每次抽取兩個數\(x,y\),將\(2x-y\)新增入數組,問這樣的操做容許進行若干次,能否得到目標數\(k\)
解析:
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<b;++i) #define rep1(i,a,b) for(int i=a;i<=b;++i) typedef long long LL; using namespace std; /*===========================================*/ template<typename T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; } const int maxn = 2e5 + 5; LL dat[maxn]; int main() { int T; int n; LL k; scanf("%d", &T); while (T--) { LL d = 0; scanf("%d%lld", &n, &k); rep(i, 0, n) scanf("%lld", &dat[i]); rep(i, 1, n) d = gcd(abs(dat[i] - dat[i - 1]), d); d *= 2; k = (k % d + d) % d; bool ok = false; rep(i,0,n) if ((dat[i] % d + d) % d == k || ((2 * dat[1] - dat[i]) % d + d) % d == k) { ok = true; break; } printf("%s\n", ok ? "YES" : "NO"); } }