Submission #173790

# Submission time Handle Problem Language Result Execution time Memory
173790 2020-01-05T12:14:30 Z davitmarg Nice sequence (IZhO18_sequence) C++17
29 / 100
2000 ms 262148 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;

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

LL 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;
        LL l, r, mid;
        l = 0;
        r = min(lca(n, m) - 1ll, 10000000ll);
        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 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 1 ms 376 KB Ok
8 Correct 2 ms 376 KB Ok
9 Correct 2 ms 376 KB Ok
10 Correct 3 ms 376 KB Ok
11 Correct 5 ms 348 KB Ok
12 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 256 KB Ok
4 Correct 2 ms 256 KB Ok
5 Correct 2 ms 252 KB Ok
6 Correct 12 ms 632 KB Ok
7 Correct 55 ms 2024 KB Ok
8 Correct 26 ms 1144 KB Ok
9 Correct 68 ms 2188 KB Ok
10 Correct 36 ms 1392 KB Ok
# Verdict Execution time Memory Grader output
1 Correct 2 ms 256 KB Ok
2 Correct 2 ms 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 256 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 2 ms 256 KB Ok
8 Correct 6 ms 376 KB Ok
9 Correct 2 ms 376 KB Ok
10 Correct 2 ms 404 KB Ok
11 Correct 2 ms 376 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 376 KB Ok
4 Correct 3 ms 376 KB Ok
5 Correct 3 ms 376 KB Ok
6 Runtime error 455 ms 262148 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 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 1 ms 376 KB Ok
8 Correct 2 ms 376 KB Ok
9 Correct 2 ms 376 KB Ok
10 Correct 3 ms 376 KB Ok
11 Correct 5 ms 348 KB Ok
12 Correct 2 ms 256 KB Ok
13 Correct 2 ms 256 KB Ok
14 Correct 2 ms 376 KB Ok
15 Correct 2 ms 256 KB Ok
16 Correct 2 ms 256 KB Ok
17 Correct 2 ms 376 KB Ok
18 Correct 2 ms 376 KB Ok
19 Correct 2 ms 256 KB Ok
20 Correct 6 ms 376 KB Ok
21 Correct 2 ms 376 KB Ok
22 Correct 2 ms 404 KB Ok
23 Correct 2 ms 376 KB Ok
24 Correct 10 ms 632 KB Ok
25 Correct 16 ms 2044 KB Ok
26 Correct 19 ms 1652 KB Ok
27 Correct 39 ms 6392 KB Ok
28 Correct 12 ms 1144 KB Ok
29 Correct 43 ms 9112 KB Ok
30 Correct 9 ms 632 KB Ok
31 Correct 12 ms 760 KB Ok
32 Correct 14 ms 888 KB Ok
33 Correct 20 ms 2936 KB Ok
34 Execution timed out 2047 ms 142476 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 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 1 ms 376 KB Ok
8 Correct 2 ms 376 KB Ok
9 Correct 2 ms 376 KB Ok
10 Correct 3 ms 376 KB Ok
11 Correct 5 ms 348 KB Ok
12 Correct 2 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 252 KB Ok
18 Correct 12 ms 632 KB Ok
19 Correct 55 ms 2024 KB Ok
20 Correct 26 ms 1144 KB Ok
21 Correct 68 ms 2188 KB Ok
22 Correct 36 ms 1392 KB Ok
23 Correct 2 ms 256 KB Ok
24 Correct 2 ms 376 KB Ok
25 Correct 2 ms 256 KB Ok
26 Correct 2 ms 256 KB Ok
27 Correct 2 ms 376 KB Ok
28 Correct 2 ms 376 KB Ok
29 Correct 2 ms 256 KB Ok
30 Correct 6 ms 376 KB Ok
31 Correct 2 ms 376 KB Ok
32 Correct 2 ms 404 KB Ok
33 Correct 2 ms 376 KB Ok
34 Correct 10 ms 632 KB Ok
35 Correct 16 ms 2044 KB Ok
36 Correct 19 ms 1652 KB Ok
37 Correct 39 ms 6392 KB Ok
38 Correct 12 ms 1144 KB Ok
39 Correct 43 ms 9112 KB Ok
40 Correct 9 ms 632 KB Ok
41 Correct 12 ms 760 KB Ok
42 Correct 14 ms 888 KB Ok
43 Correct 20 ms 2936 KB Ok
44 Execution timed out 2047 ms 142476 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 376 KB Ok
3 Correct 2 ms 256 KB Ok
4 Correct 2 ms 376 KB Ok
5 Correct 2 ms 376 KB Ok
6 Correct 2 ms 376 KB Ok
7 Correct 1 ms 376 KB Ok
8 Correct 2 ms 376 KB Ok
9 Correct 2 ms 376 KB Ok
10 Correct 3 ms 376 KB Ok
11 Correct 5 ms 348 KB Ok
12 Correct 2 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 252 KB Ok
18 Correct 12 ms 632 KB Ok
19 Correct 55 ms 2024 KB Ok
20 Correct 26 ms 1144 KB Ok
21 Correct 68 ms 2188 KB Ok
22 Correct 36 ms 1392 KB Ok
23 Correct 2 ms 256 KB Ok
24 Correct 2 ms 376 KB Ok
25 Correct 2 ms 256 KB Ok
26 Correct 2 ms 256 KB Ok
27 Correct 2 ms 376 KB Ok
28 Correct 2 ms 376 KB Ok
29 Correct 2 ms 256 KB Ok
30 Correct 6 ms 376 KB Ok
31 Correct 2 ms 376 KB Ok
32 Correct 2 ms 404 KB Ok
33 Correct 2 ms 376 KB Ok
34 Correct 2 ms 256 KB Ok
35 Correct 2 ms 256 KB Ok
36 Correct 2 ms 376 KB Ok
37 Correct 3 ms 376 KB Ok
38 Correct 3 ms 376 KB Ok
39 Runtime error 455 ms 262148 KB Execution killed with signal 9 (could be triggered by violating memory limits)
40 Halted 0 ms 0 KB -