QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#555849#5103. Fair DivisionRico64TL 1204ms22360kbC++232.8kb2024-09-10 11:02:572024-09-10 11:02:58

Judging History

你现在查看的是最新测评结果

  • [2024-09-10 11:02:58]
  • 评测
  • 测评结果:TL
  • 用时:1204ms
  • 内存:22360kb
  • [2024-09-10 11:02:57]
  • 提交

answer

#include <iostream>

using namespace std;

__int128 powr(__int128 a, __int128 b, __int128 num) {
    if (a == 1) return 1;
    if (b > 75) return -1;
    __int128 r = 1;
    int i;
    for (i = 0; i < b && r <= (num + a - (__int128)1L) / a; r *= a, ++i);
    if (i >= b && r <= num) {
        return r;
    } else {
        return -1;
    }
}

int main() {
    long long ni, mi;
    cin >> ni >> mi;
    __int128 n = ni;
    __int128 m = mi;
    if (n > 160) {
        cout << "impossible" << endl;
        return 0;
    }
    __int128 cache[20206][ni];
    fill(cache[0], cache[0] + n, (__int128)0);
    fill(cache[1], cache[1] + n, (__int128)1);
    for (__int128 q = 2; q < 20206; ++q) {
        cache[q][0] = (__int128)1;
        cache[q][1] = (__int128)q;
        __int128 num = m * (__int128)20206;
        for (__int128 i = 2; i < n; ++i) {
            if (cache[q][i - 1] == -1 || cache[q][i - 1] > (num + q - 1) / q) {
                cache[q][i] = -1;
            } else {
                cache[q][i] = cache[q][i - 1] * q;
                if (cache[q][i] > num) cache[q][i] = -1;
            }
        }
    }
    for (__int128 q = 2; q < 20206; ++q) {
        for (__int128 p = q - 1; p > 0; --p) {
            __int128 num = (__int128)m * (__int128)(q - p);
            __int128 tsum = 0;
            bool flag = true;
            for (__int128 i = 0; i < n; ++i) {
                __int128 le = cache[p][i];
                __int128 ri = cache[q][n - 1 - i];
                if (le == -1 || ri == -1 || le > (num - tsum + ri - 1) / ri) {
                    flag = false;
                    break;
                }
                tsum += le * ri;
            }
            if (!flag || num < tsum) {
                break;
            }
            __int128 rem = num % tsum;
            if (rem != 0) continue;
            cout << (long long)(q - p) << ' ' << (long long)q << endl;
            return 0;
        }
        for (__int128 p = 1; p < q; ++p) {
            __int128 num = (__int128)m * (__int128)(q - p);
            __int128 tsum = 0;
            bool flag = true;
            for (__int128 i = 0; i < n; ++i) {
                __int128 le = powr(p, i, num - tsum);
                __int128 ri = powr(q, n - 1 - i, num - tsum);
                if (le == -1 || ri == -1 || le > (num - tsum + ri - 1) / ri) {
                    flag = false;
                    break;
                }
                tsum += le * ri;
            }
            if (!flag || num < tsum) {
                break;
            }
            __int128 rem = num % tsum;
            if (rem != 0) continue;
            cout << (long long)(q - p) << ' ' << (long long)q << endl;
            return 0;
        }
    }
    cout << "impossible" << endl;

    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 0ms
memory: 7620kb

input:

13 382475111752106101

output:

17 28

result:

ok single line: '17 28'

Test #2:

score: 0
Accepted
time: 0ms
memory: 22360kb

input:

59 576460752303423487

output:

1 2

result:

ok single line: '1 2'

Test #3:

score: 0
Accepted
time: 3ms
memory: 8548kb

input:

15 227368755046033249

output:

13 14

result:

ok single line: '13 14'

Test #4:

score: 0
Accepted
time: 0ms
memory: 12288kb

input:

27 72027091647987988

output:

1 4

result:

ok single line: '1 4'

Test #5:

score: 0
Accepted
time: 3ms
memory: 7392kb

input:

12 817283057828223168

output:

10 17

result:

ok single line: '10 17'

Test #6:

score: 0
Accepted
time: 3ms
memory: 16212kb

input:

40 279103330129289325

output:

1 2

result:

ok single line: '1 2'

Test #7:

score: 0
Accepted
time: 2ms
memory: 6440kb

input:

9 200754090585004509

output:

27 31

result:

ok single line: '27 31'

Test #8:

score: 0
Accepted
time: 0ms
memory: 7708kb

input:

13 145272043713167318

output:

11 19

result:

ok single line: '11 19'

Test #9:

score: 0
Accepted
time: 2ms
memory: 7836kb

input:

13 330339892079732537

output:

3 5

result:

ok single line: '3 5'

Test #10:

score: 0
Accepted
time: 0ms
memory: 6064kb

input:

8 518312274023062851

output:

35 81

result:

ok single line: '35 81'

Test #11:

score: 0
Accepted
time: 2ms
memory: 6120kb

input:

8 226575677743060500

output:

3 37

result:

ok single line: '3 37'

Test #12:

score: 0
Accepted
time: 0ms
memory: 10456kb

input:

22 947676267664323372

output:

5 6

result:

ok single line: '5 6'

Test #13:

score: 0
Accepted
time: 3ms
memory: 6120kb

input:

8 884152939068009488

output:

32 87

result:

ok single line: '32 87'

Test #14:

score: 0
Accepted
time: 2ms
memory: 6956kb

input:

10 334992255296783634

output:

1 2

result:

ok single line: '1 2'

Test #15:

score: 0
Accepted
time: 2ms
memory: 6444kb

input:

9 387165762000719100

output:

9 26

result:

ok single line: '9 26'

Test #16:

score: 0
Accepted
time: 3ms
memory: 7704kb

input:

13 966426794141592430

output:

5 23

result:

ok single line: '5 23'

Test #17:

score: 0
Accepted
time: 0ms
memory: 13076kb

input:

30 3882204456

output:

impossible

result:

ok single line: 'impossible'

Test #18:

score: 0
Accepted
time: 3ms
memory: 8884kb

input:

17 388292937745500

output:

impossible

result:

ok single line: 'impossible'

Test #19:

score: 0
Accepted
time: 277ms
memory: 5984kb

input:

7 77777777777777777

output:

impossible

result:

ok single line: 'impossible'

Test #20:

score: 0
Accepted
time: 2ms
memory: 5464kb

input:

6 1

output:

impossible

result:

ok single line: 'impossible'

Test #21:

score: 0
Accepted
time: 2ms
memory: 5368kb

input:

6 6

output:

impossible

result:

ok single line: 'impossible'

Test #22:

score: 0
Accepted
time: 3ms
memory: 5716kb

input:

6 666666666

output:

impossible

result:

ok single line: 'impossible'

Test #23:

score: 0
Accepted
time: 1204ms
memory: 5428kb

input:

6 982698952174251648

output:

3966 3967

result:

ok single line: '3966 3967'

Test #24:

score: 0
Accepted
time: 2ms
memory: 5492kb

input:

6 998905704529596381

output:

1 2

result:

ok single line: '1 2'

Test #25:

score: -100
Time Limit Exceeded

input:

6 1000000000000000000

output:


result: