Submission #173789

# Submission time Handle Problem Language Result Execution time Memory
173789 2020-01-05T12:12:44 Z davitmarg Nice sequence (IZhO18_sequence) C++17
29 / 100
2000 ms 262144 KB
/*DavitMarg*/
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <string>
#include <cstring>
#include <map>
#include <unordered_map>
#include <set>
#include <queue>
#include <iomanip>
#include <bitset>
#include <stack>
#include <cassert>
#include <iterator>
#include <fstream>
#define mod 1000000007ll
#define LL long long
#define LD long double
#define MP make_pair
#define PB push_back
#define all(v) v.begin(), v.end()
using namespace std;

const int N = 200005 * 5;

int gcd(int a, int b)
{
    if (!a || !b)
        return a + b;
    return gcd(b, a % b);
}

int lca(LL a, LL b)
{
    return a * b / gcd(a, b);
}

int q, n, m, k;
vector<int> t, a, used, tin;
vector<vector<int>> g;

void dfs(int v)
{
    used[v] = 1;
    for (int i = 0; i < g[v].size(); i++)
    {
        int to = g[v][i];
        if (used[to])
            continue;
        dfs(to);
    }
    tin[v] = -t.size();
    t.PB(v);
}

bool check(int x)
{
    t.clear();
    a.resize(x + 2);
    used.resize(x + 2);
    tin.resize(x + 2);
    g.resize(x + 2);
    for (int i = 0; i <= x; i++)
    {
        g[i].clear();
        used[i] = 0;
        a[i] = i;
    }

    for (int i = 0; i <= x; i++)
    {
        if (i - m >= 0)
            g[i - m].PB(i);
        if (i + n <= x)
            g[i + n].PB(i);
    }
    for (int i = 0; i <= x; i++)
        if (!used[i])
            dfs(i);
    reverse(all(t));
    //cout << "!!!!!" << x << endl;
    for (int i = 0; i < t.size(); i++)
    {
        int v = t[i];
        for (int j = 0; j < g[v].size(); j++)
        {
            int to = g[v][j];
            if (tin[to] <= tin[v])
                return 0;
            //cout << v << " : " << to << endl;
            a[to] = max(a[to], a[v] + 1);
        }
    }
    return 1;
}

int main()
{
    cin >> q;
    while (q--)
    {
        k = 0;
        cin >> n >> m;
        int l, r, mid;
        l = 0;
        r = lca(n, m) - 1;
        while (l <= r)
        {
            mid = (l + r) / 2;
            if (check(mid))
            {
                k = mid;
                l = mid + 1;
            }
            else
                r = mid - 1;
        }
        check(k);
        cout << k << endl;
        for (int i = 1; i <= k; i++)
            printf("%d ", a[i] - a[i - 1]);
        cout << endl;
    }
    return 0;
}

/*

4
3 1
2 3
1 1
2 2

 
*/

Compilation message

sequence.cpp: In function 'void dfs(int)':
sequence.cpp:47:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < g[v].size(); i++)
                     ~~^~~~~~~~~~~~~
sequence.cpp: In function 'bool check(int)':
sequence.cpp:84:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < t.size(); i++)
                     ~~^~~~~~~~~~
sequence.cpp:87:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int j = 0; j < g[v].size(); j++)
                         ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 380 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 252 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 256 KB Ok
7 Correct 2 ms 256 KB Ok
8 Correct 2 ms 256 KB Ok
9 Correct 2 ms 256 KB Ok
10 Correct 2 ms 252 KB Ok
11 Correct 2 ms 256 KB Ok
12 Correct 3 ms 256 KB Ok
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 256 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 256 KB Ok
5 Correct 2 ms 256 KB Ok
6 Correct 12 ms 760 KB Ok
7 Correct 57 ms 1968 KB Ok
8 Correct 27 ms 1144 KB Ok
9 Correct 68 ms 2292 KB Ok
10 Correct 38 ms 1412 KB Ok
# Verdict Execution time Memory Grader output
1 Correct 2 ms 376 KB Ok
2 Correct 2 ms 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 296 KB Ok
5 Correct 2 ms 256 KB Ok
6 Correct 3 ms 376 KB Ok
7 Correct 2 ms 376 KB Ok
8 Correct 3 ms 256 KB Ok
9 Correct 2 ms 252 KB Ok
10 Correct 2 ms 256 KB Ok
11 Correct 2 ms 256 KB Ok
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 256 KB Ok
3 Correct 2 ms 348 KB Ok
4 Correct 3 ms 376 KB Ok
5 Correct 3 ms 376 KB Ok
6 Runtime error 236 ms 262144 KB Execution killed with signal 9 (could be triggered by violating memory limits)
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 380 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 252 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 256 KB Ok
7 Correct 2 ms 256 KB Ok
8 Correct 2 ms 256 KB Ok
9 Correct 2 ms 256 KB Ok
10 Correct 2 ms 252 KB Ok
11 Correct 2 ms 256 KB Ok
12 Correct 3 ms 256 KB Ok
13 Correct 2 ms 376 KB Ok
14 Correct 2 ms 376 KB Ok
15 Correct 2 ms 256 KB Ok
16 Correct 2 ms 296 KB Ok
17 Correct 2 ms 256 KB Ok
18 Correct 3 ms 376 KB Ok
19 Correct 2 ms 376 KB Ok
20 Correct 3 ms 256 KB Ok
21 Correct 2 ms 252 KB Ok
22 Correct 2 ms 256 KB Ok
23 Correct 2 ms 256 KB Ok
24 Correct 10 ms 632 KB Ok
25 Correct 16 ms 2040 KB Ok
26 Correct 18 ms 1628 KB Ok
27 Correct 36 ms 6388 KB Ok
28 Correct 12 ms 1232 KB Ok
29 Correct 44 ms 9264 KB Ok
30 Correct 9 ms 632 KB Ok
31 Correct 12 ms 760 KB Ok
32 Correct 13 ms 1016 KB Ok
33 Correct 19 ms 3064 KB Ok
34 Execution timed out 2072 ms 142404 KB Time limit exceeded
35 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 380 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 252 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 256 KB Ok
7 Correct 2 ms 256 KB Ok
8 Correct 2 ms 256 KB Ok
9 Correct 2 ms 256 KB Ok
10 Correct 2 ms 252 KB Ok
11 Correct 2 ms 256 KB Ok
12 Correct 3 ms 256 KB Ok
13 Correct 2 ms 256 KB Ok
14 Correct 2 ms 256 KB Ok
15 Correct 2 ms 256 KB Ok
16 Correct 2 ms 256 KB Ok
17 Correct 2 ms 256 KB Ok
18 Correct 12 ms 760 KB Ok
19 Correct 57 ms 1968 KB Ok
20 Correct 27 ms 1144 KB Ok
21 Correct 68 ms 2292 KB Ok
22 Correct 38 ms 1412 KB Ok
23 Correct 2 ms 376 KB Ok
24 Correct 2 ms 376 KB Ok
25 Correct 2 ms 256 KB Ok
26 Correct 2 ms 296 KB Ok
27 Correct 2 ms 256 KB Ok
28 Correct 3 ms 376 KB Ok
29 Correct 2 ms 376 KB Ok
30 Correct 3 ms 256 KB Ok
31 Correct 2 ms 252 KB Ok
32 Correct 2 ms 256 KB Ok
33 Correct 2 ms 256 KB Ok
34 Correct 10 ms 632 KB Ok
35 Correct 16 ms 2040 KB Ok
36 Correct 18 ms 1628 KB Ok
37 Correct 36 ms 6388 KB Ok
38 Correct 12 ms 1232 KB Ok
39 Correct 44 ms 9264 KB Ok
40 Correct 9 ms 632 KB Ok
41 Correct 12 ms 760 KB Ok
42 Correct 13 ms 1016 KB Ok
43 Correct 19 ms 3064 KB Ok
44 Execution timed out 2072 ms 142404 KB Time limit exceeded
45 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 380 KB Ok
3 Correct 2 ms 376 KB Ok
4 Correct 2 ms 252 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 256 KB Ok
7 Correct 2 ms 256 KB Ok
8 Correct 2 ms 256 KB Ok
9 Correct 2 ms 256 KB Ok
10 Correct 2 ms 252 KB Ok
11 Correct 2 ms 256 KB Ok
12 Correct 3 ms 256 KB Ok
13 Correct 2 ms 256 KB Ok
14 Correct 2 ms 256 KB Ok
15 Correct 2 ms 256 KB Ok
16 Correct 2 ms 256 KB Ok
17 Correct 2 ms 256 KB Ok
18 Correct 12 ms 760 KB Ok
19 Correct 57 ms 1968 KB Ok
20 Correct 27 ms 1144 KB Ok
21 Correct 68 ms 2292 KB Ok
22 Correct 38 ms 1412 KB Ok
23 Correct 2 ms 376 KB Ok
24 Correct 2 ms 376 KB Ok
25 Correct 2 ms 256 KB Ok
26 Correct 2 ms 296 KB Ok
27 Correct 2 ms 256 KB Ok
28 Correct 3 ms 376 KB Ok
29 Correct 2 ms 376 KB Ok
30 Correct 3 ms 256 KB Ok
31 Correct 2 ms 252 KB Ok
32 Correct 2 ms 256 KB Ok
33 Correct 2 ms 256 KB Ok
34 Correct 2 ms 256 KB Ok
35 Correct 2 ms 256 KB Ok
36 Correct 2 ms 348 KB Ok
37 Correct 3 ms 376 KB Ok
38 Correct 3 ms 376 KB Ok
39 Runtime error 236 ms 262144 KB Execution killed with signal 9 (could be triggered by violating memory limits)
40 Halted 0 ms 0 KB -