ГЖО 7-8 класс 2019 год
Есеп D. Жан достар
Айбай мен Абар ойын ойнап отыр. Оларда $a$ және $b$ оң бүтін сандардың екі массиві бар. Айбай $a$ массивіндегі екі көршілес сандарды алып, оларды сол екі санның қосындысымен ауыстыра алады. Мысалы: $[2, 4, 1, 7]$ -> $[2, 5, 7]$. Абар сондай операцияны $b$ массивімен жасай алады. Олар жақсы достар болғандықтан, нәтижесінде алынған массивтер бірдей болуын қалайды. Бірақ, олар үлкен массивтерді өте жақсы көреді, сондықтан алынған массивтердің ұзын болуын қалайды. Алынған массивтердің барынша мүмкін ұзындығын табыңыз.
5 11 2 3 5 7 4 11 7 3 7Жауап
3Оқу
2 1 2 1 100Жауап
-1Оқу
3 1 2 3 3 1 2 3Жауап
3( Batyr Sardarbekov )
Комментарий/решение:
#include <bits/stdc++.h>
#define yes cout << "Yes\n"
#define no cout << "No\n"
#define Zhussip ios_base::sync_with_stdio(false), cin.tie(nullptr),cout.tie(nullptr)
#define all(a) (a).begin(),(a).end()
typedef long long ll;
#define int long long
const int maxn = 4e5 + 2008;
const long long inf = 1e18 + 2008;
const int mod = 1e9 + 7;
using namespace std;
int a[maxn], b[maxn], pref[maxn], prefb[maxn], n, m;
int rec(int v, int vb) {
int left = vb + 1;
if (vb >= m || v >= n) return 0;
for (int l = v + 1; l <= n; l++) {
while (prefb[left] - prefb[vb] < pref[l] - pref[v] && left < m) {
left++;
}
if (pref[l] - pref[v] == prefb[left] - prefb[vb]) {
return rec(l, left) + 1;
}
}
return 0;
}
void keepcoding() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
pref[i] = pref[i - 1] + a[i];
}
cin >> m;
for (int i = 1; i <= m; i++) {
cin >> b[i];
prefb[i] = prefb[i - 1] + b[i];
}
if (prefb[m] != pref[n]) {
cout << -1;
return;
}
int ans = rec(0, 0);
cout << ans;
}
signed main() {
Zhussip;
srand(time(0));
int _ = 1;
while (_ > 0) {
keepcoding();
_--;
}
return 0;
}
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.