168472025-05-14 08:11:39TortelliniJrÖsszegzésekcpp17Partially correct 21/10017ms1388 KiB
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n, s, x, t, u;
    vector<int> a, b, o;
    s = 0;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> x;
        a.push_back(x);
        b.push_back(x);
        o.push_back(x);
        s += x;
    }
    //find one higher
    //method: go from end, find smallest number that neighbors one that is bigger, increment it and save its location
    //but: never can be the last number: cant add ones
    //so we start later
    //also end before 0: dont want overindexing
    //if none found: increment first
    //solution: copy everything until location, then spam 1 until sum = s
    if (o.size() != 1)
    {
        int z = s - a[a.size() - 1];
        int loc = 0;
        for (int i = a.size() - 2; i > 0; i--)
        {
            if (a[i] < a[i - 1])
            {
                loc = i;
                break;
            }
            else
            {
                z -= a[i];
            }
        }
        a[loc]++;
        z++;
        a.resize(loc + 1);
        for (int i = 0; i < s - z; i++)
        {
            a.push_back(1);
        }
    }
    //find one lower (earlier)
    //method: drop first non-one value by one, proceed to append one to the last number we can "legally" add to, if none then append zero
    //sum is same, but lexicographically lower now
    int l = 0;
    for (int i = b.size() - 1; i >= 0; i--)
    {
        if (b[i] != 1)
        {
            b[i]--;
            l = i;
            break;
        }
    }
    for (int i = l + 1; i < b.size(); i++)
    {
        if (b[i] < b[i - 1])
        {
            b[i]++;
            break;
        }
    }
    //output time!
    for (int i = 0; i < a.size(); i++)
    {
        cout << a[i] << " ";
    }
    cout << endl;
    if (b != o)
    {
        for (int i = 0; i < b.size(); i++)
        {
            cout << b[i] << " ";
        }
    }
    else
    {
        cout << "0";
    }
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted1ms316 KiB
2Partially correct1ms316 KiB
3Partially correct1ms316 KiB
subtask20/6
4Partially correct1ms316 KiB
5Wrong answer1ms316 KiB
6Wrong answer1ms316 KiB
7Wrong answer1ms316 KiB
8Wrong answer1ms380 KiB
subtask36/6
9Accepted1ms316 KiB
10Accepted1ms316 KiB
11Accepted1ms316 KiB
12Accepted4ms564 KiB
13Accepted4ms564 KiB
subtask45/10
14Accepted1ms316 KiB
15Accepted1ms316 KiB
16Accepted1ms316 KiB
17Accepted4ms564 KiB
18Accepted4ms564 KiB
19Partially correct1ms316 KiB
20Partially correct2ms316 KiB
21Partially correct16ms1240 KiB
22Partially correct17ms1388 KiB
23Partially correct16ms1184 KiB
subtask55/10
24Partially correct1ms316 KiB
25Partially correct1ms316 KiB
26Partially correct1ms508 KiB
27Partially correct1ms316 KiB
28Partially correct1ms316 KiB
subtask65/10
29Partially correct1ms548 KiB
30Partially correct1ms500 KiB
31Partially correct1ms316 KiB
32Partially correct1ms316 KiB
33Partially correct1ms316 KiB
subtask70/58
34Accepted1ms316 KiB
35Partially correct1ms316 KiB
36Partially correct1ms316 KiB
37Partially correct1ms316 KiB
38Wrong answer1ms316 KiB
39Wrong answer1ms316 KiB
40Wrong answer1ms316 KiB
41Wrong answer1ms380 KiB
42Accepted1ms316 KiB
43Accepted1ms316 KiB
44Accepted1ms316 KiB
45Accepted4ms564 KiB
46Accepted4ms564 KiB
47Partially correct1ms316 KiB
48Partially correct2ms316 KiB
49Partially correct16ms1240 KiB
50Partially correct17ms1388 KiB
51Partially correct1ms316 KiB
52Partially correct1ms548 KiB
53Partially correct1ms500 KiB
54Partially correct1ms316 KiB
55Partially correct1ms316 KiB
56Partially correct1ms316 KiB
57Partially correct1ms316 KiB
58Partially correct1ms316 KiB
59Partially correct1ms408 KiB
60Partially correct1ms316 KiB
61Partially correct1ms316 KiB
62Partially correct1ms392 KiB
63Partially correct2ms316 KiB
64Partially correct2ms316 KiB
65Partially correct3ms316 KiB
66Partially correct4ms564 KiB