Submission #543337

# Submission time Handle Problem Language Result Execution time Memory
543337 2022-03-30T10:12:28 Z eecs Present (RMI21_present) C++17
100 / 100
2325 ms 4344 KB
#include <bits/stdc++.h>
using namespace std;

int T, K, lim[1 << 19], mark[38], cnt[1 << 18];
bool ok1[1 << 19], ok2[1 << 18];

int main() {
    // odd
    for (int i = 0; i < 1 << 19; i++) {
        ok1[i] = 1, lim[i] = (1 << 18) - 1;
        for (int j = 0; j < 19 && ok1[i]; j++) if (i >> j & 1) {
            for (int k = j + 1; k < 19; k++) if (i >> k & 1) {
                ok1[i] &= i >> (__gcd(2 * j + 1, 2 * k + 1) / 2) & 1;
            }
            for (int k = 0; k < 18; k++) {
                if (!(i >> (__gcd(2 * j + 1, 2 * k + 2) / 2) & 1)) lim[i] &= ~(1 << k);
            }
        }
    }
    // even
    for (int i = 0; i < 1 << 18; i++) {
        ok2[i] = 1;
        for (int j = 0; j < 18 && ok2[i]; j++) if (i >> j & 1) {
            for (int k = j + 1; k < 18; k++) if (i >> k & 1) {
                ok2[i] &= i >> (__gcd(2 * j + 2, 2 * k + 2) / 2 - 1) & 1;
            }
        }
    }
    auto calc = [&]() {
        memset(cnt, 0, sizeof(cnt));
        for (int i = 0; i < 1 << 18; i++) if (ok2[i]) {
            bool flag = 1;
            for (int j = 0; j < 18; j++) {
                if (~mark[2 * j + 2] && mark[2 * j + 2] ^ (i >> j & 1)) flag = 0;
            }
            if (flag) cnt[i]++;
        }
        for (int i = 0; i < 18; i++) {
            for (int j = 0; j < 1 << 18; j++) {
                if (j >> i & 1) cnt[j] += cnt[j ^ (1 << i)];
            }
        }
        long long s = 0;
        for (int i = 0; i < 1 << 19; i++) if (ok1[i]) {
            bool flag = 1;
            for (int j = 0; j < 19; j++) {
                if (~mark[2 * j + 1] && mark[2 * j + 1] ^ (i >> j & 1)) flag = 0;
            }
            if (flag) s += cnt[lim[i]];
        }
        return s;
    };
    scanf("%d", &T);
    while (T--) {
        scanf("%d", &K), K++;
        memset(mark, -1, sizeof(mark));
        vector<int> res;
        for (int i = 37; i; i--) {
            mark[i] = 0;
            long long t = calc();
            if (t < K) mark[i] = 1, K -= t, res.push_back(i);
        }
        printf("%d", res.size());
        reverse(res.begin(), res.end());
        for (int x : res) printf(" %d", x);
        putchar('\n');
    }
    return 0;
}

Compilation message

Main.cpp: In function 'int main()':
Main.cpp:63:18: warning: format '%d' expects argument of type 'int', but argument 2 has type 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wformat=]
   63 |         printf("%d", res.size());
      |                 ~^   ~~~~~~~~~~
      |                  |           |
      |                  int         std::vector<int>::size_type {aka long unsigned int}
      |                 %ld
Main.cpp:53:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |     scanf("%d", &T);
      |     ~~~~~^~~~~~~~~~
Main.cpp:55:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |         scanf("%d", &K), K++;
      |         ~~~~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2254 ms 4260 KB Output is correct
2 Correct 2256 ms 4132 KB Output is correct
3 Correct 2325 ms 4132 KB Output is correct
4 Correct 2263 ms 4308 KB Output is correct
5 Correct 2261 ms 4196 KB Output is correct
6 Correct 2274 ms 4184 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2254 ms 4260 KB Output is correct
2 Correct 2256 ms 4132 KB Output is correct
3 Correct 2325 ms 4132 KB Output is correct
4 Correct 2263 ms 4308 KB Output is correct
5 Correct 2261 ms 4196 KB Output is correct
6 Correct 2274 ms 4184 KB Output is correct
7 Correct 2250 ms 4132 KB Output is correct
8 Correct 2276 ms 4132 KB Output is correct
9 Correct 2288 ms 4112 KB Output is correct
10 Correct 2240 ms 4208 KB Output is correct
11 Correct 2281 ms 4276 KB Output is correct
12 Correct 2290 ms 4232 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2254 ms 4260 KB Output is correct
2 Correct 2256 ms 4132 KB Output is correct
3 Correct 2325 ms 4132 KB Output is correct
4 Correct 2263 ms 4308 KB Output is correct
5 Correct 2261 ms 4196 KB Output is correct
6 Correct 2274 ms 4184 KB Output is correct
7 Correct 2250 ms 4132 KB Output is correct
8 Correct 2276 ms 4132 KB Output is correct
9 Correct 2288 ms 4112 KB Output is correct
10 Correct 2240 ms 4208 KB Output is correct
11 Correct 2281 ms 4276 KB Output is correct
12 Correct 2290 ms 4232 KB Output is correct
13 Correct 2274 ms 4132 KB Output is correct
14 Correct 2229 ms 4260 KB Output is correct
15 Correct 2266 ms 4132 KB Output is correct
16 Correct 2254 ms 4220 KB Output is correct
17 Correct 2225 ms 4132 KB Output is correct
18 Correct 2255 ms 4256 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2254 ms 4260 KB Output is correct
2 Correct 2256 ms 4132 KB Output is correct
3 Correct 2325 ms 4132 KB Output is correct
4 Correct 2263 ms 4308 KB Output is correct
5 Correct 2261 ms 4196 KB Output is correct
6 Correct 2274 ms 4184 KB Output is correct
7 Correct 2250 ms 4132 KB Output is correct
8 Correct 2276 ms 4132 KB Output is correct
9 Correct 2288 ms 4112 KB Output is correct
10 Correct 2240 ms 4208 KB Output is correct
11 Correct 2281 ms 4276 KB Output is correct
12 Correct 2290 ms 4232 KB Output is correct
13 Correct 2274 ms 4132 KB Output is correct
14 Correct 2229 ms 4260 KB Output is correct
15 Correct 2266 ms 4132 KB Output is correct
16 Correct 2254 ms 4220 KB Output is correct
17 Correct 2225 ms 4132 KB Output is correct
18 Correct 2255 ms 4256 KB Output is correct
19 Correct 2230 ms 4128 KB Output is correct
20 Correct 2246 ms 4132 KB Output is correct
21 Correct 2289 ms 4128 KB Output is correct
22 Correct 2287 ms 4096 KB Output is correct
23 Correct 2259 ms 4192 KB Output is correct
24 Correct 2226 ms 4272 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2254 ms 4260 KB Output is correct
2 Correct 2256 ms 4132 KB Output is correct
3 Correct 2325 ms 4132 KB Output is correct
4 Correct 2263 ms 4308 KB Output is correct
5 Correct 2261 ms 4196 KB Output is correct
6 Correct 2274 ms 4184 KB Output is correct
7 Correct 2250 ms 4132 KB Output is correct
8 Correct 2276 ms 4132 KB Output is correct
9 Correct 2288 ms 4112 KB Output is correct
10 Correct 2240 ms 4208 KB Output is correct
11 Correct 2281 ms 4276 KB Output is correct
12 Correct 2290 ms 4232 KB Output is correct
13 Correct 2274 ms 4132 KB Output is correct
14 Correct 2229 ms 4260 KB Output is correct
15 Correct 2266 ms 4132 KB Output is correct
16 Correct 2254 ms 4220 KB Output is correct
17 Correct 2225 ms 4132 KB Output is correct
18 Correct 2255 ms 4256 KB Output is correct
19 Correct 2230 ms 4128 KB Output is correct
20 Correct 2246 ms 4132 KB Output is correct
21 Correct 2289 ms 4128 KB Output is correct
22 Correct 2287 ms 4096 KB Output is correct
23 Correct 2259 ms 4192 KB Output is correct
24 Correct 2226 ms 4272 KB Output is correct
25 Correct 2271 ms 4136 KB Output is correct
26 Correct 2219 ms 4344 KB Output is correct
27 Correct 2253 ms 4128 KB Output is correct
28 Correct 2264 ms 4172 KB Output is correct
29 Correct 2296 ms 4224 KB Output is correct
30 Correct 2260 ms 4308 KB Output is correct