233412026-01-20 10:45:35abcdIntervallumok (45 pont)cpp17Futási hiba 2/4516ms1140 KiB
#include <bits/stdc++.h>
using namespace std;

const int MAXL = 1000000000;

int main() {
    ios_base::sync_with_stdio(false);  cin.tie(0);cout.tie(0);
    int n;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    vector<pair<int, int>> ans;
    vector<vector<int>> v;
    ans.push_back({1, a[n - 1] - a[0]});
    v.push_back({a[0]});
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            int round = 0;
            for (int k : {n / i, i}) {
                if (n / i == i && round) break;
                vector<int> h(n / k), prev(k + 1), l(n / k);
                prev[0] = prev[k] = MAXL;
                int mx = 0;
                for (int j = 0; j * k < n; j++) {
                    int id = j * k;
                    h[j] = a[id + k - 1] - a[id];
                    mx = max(mx, h[j]);
                    if (j > 0)
                        prev[j] = a[id] - a[id - 1];
                }
                bool ok = true;
                for (int j = 0; j * k < n; j++) {
                    if (h[j] < mx) {
                        if (prev[j] >= mx - h[j]) {
                            l[j] = a[j * k] - (mx - h[j]);
                            prev[j] -= (mx - h[j]);
                        }
                        else if (prev[j] + prev[j + 1] >= mx - h[j]) {
                            l[j] = a[j * k] - (mx - h[j] - prev[j]);
                            prev[j + 1] -= (mx - h[j] - prev[j]);
                            prev[j] = 0;
                        }
                        else {
                            ok = false;
                            break;
                        }
                    } else l[j] = a[j * k];
                }
                if (ok) {
                    ans.push_back({n / k, mx});
                    v.push_back(l);
                }
                round++;
            }

        }
    }
    cout << ans.size() << endl;
    for (int i = 0; i < ans.size(); i++) {
        cout << ans[i].first << " " << ans[i].second << endl;
        for (int j : v[i]) cout << j << endl;
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base2/45
1Elfogadva0/01ms316 KiB
2Futási hiba0/01ms316 KiB
3Elfogadva1/11ms316 KiB
4Elfogadva1/11ms508 KiB
5Futási hiba0/11ms508 KiB
6Futási hiba0/13ms564 KiB
7Futási hiba0/116ms1140 KiB
8Futási hiba0/21ms316 KiB
9Futási hiba0/29ms692 KiB
10Futási hiba0/28ms820 KiB
11Futási hiba0/29ms824 KiB
12Futási hiba0/29ms820 KiB
13Futási hiba0/29ms696 KiB
14Futási hiba0/22ms384 KiB
15Futási hiba0/22ms456 KiB
16Futási hiba0/23ms564 KiB
17Futási hiba0/24ms564 KiB
18Futási hiba0/24ms564 KiB
19Futási hiba0/214ms912 KiB
20Futási hiba0/214ms1120 KiB
21Futási hiba0/214ms912 KiB
22Futási hiba0/214ms1128 KiB
23Futási hiba0/214ms912 KiB
24Futási hiba0/29ms820 KiB
25Futási hiba0/29ms908 KiB
26Futási hiba0/29ms912 KiB
27Futási hiba0/213ms912 KiB