QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#555831#5103. Fair DivisionRico64TL 1557ms3804kbC++232.2kb2024-09-10 10:43:212024-09-10 10:43:22

Judging History

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

  • [2024-09-10 10:43:22]
  • 评测
  • 测评结果:TL
  • 用时:1557ms
  • 内存:3804kb
  • [2024-09-10 10:43:21]
  • 提交

answer

#include <iostream>

__int128 INT128_MAX = (__int128)2e18L * (__int128)2e18L;
__int128 INT128_SQRT = (__int128)2e18L;

using namespace std;

__int128 powr(__int128 a, __int128 b, __int128 num) {
    __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;
    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 = 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;
        }
        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: 1ms
memory: 3512kb

input:

13 382475111752106101

output:

17 28

result:

ok single line: '17 28'

Test #2:

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

input:

59 576460752303423487

output:

1 2

result:

ok single line: '1 2'

Test #3:

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

input:

15 227368755046033249

output:

13 14

result:

ok single line: '13 14'

Test #4:

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

input:

27 72027091647987988

output:

1 4

result:

ok single line: '1 4'

Test #5:

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

input:

12 817283057828223168

output:

10 17

result:

ok single line: '10 17'

Test #6:

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

input:

40 279103330129289325

output:

1 2

result:

ok single line: '1 2'

Test #7:

score: 0
Accepted
time: 1ms
memory: 3508kb

input:

9 200754090585004509

output:

27 31

result:

ok single line: '27 31'

Test #8:

score: 0
Accepted
time: 1ms
memory: 3596kb

input:

13 145272043713167318

output:

11 19

result:

ok single line: '11 19'

Test #9:

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

input:

13 330339892079732537

output:

3 5

result:

ok single line: '3 5'

Test #10:

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

input:

8 518312274023062851

output:

35 81

result:

ok single line: '35 81'

Test #11:

score: 0
Accepted
time: 1ms
memory: 3732kb

input:

8 226575677743060500

output:

3 37

result:

ok single line: '3 37'

Test #12:

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

input:

22 947676267664323372

output:

5 6

result:

ok single line: '5 6'

Test #13:

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

input:

8 884152939068009488

output:

32 87

result:

ok single line: '32 87'

Test #14:

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

input:

10 334992255296783634

output:

1 2

result:

ok single line: '1 2'

Test #15:

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

input:

9 387165762000719100

output:

9 26

result:

ok single line: '9 26'

Test #16:

score: 0
Accepted
time: 1ms
memory: 3496kb

input:

13 966426794141592430

output:

5 23

result:

ok single line: '5 23'

Test #17:

score: 0
Accepted
time: 1ms
memory: 3540kb

input:

30 3882204456

output:

impossible

result:

ok single line: 'impossible'

Test #18:

score: 0
Accepted
time: 1ms
memory: 3464kb

input:

17 388292937745500

output:

impossible

result:

ok single line: 'impossible'

Test #19:

score: 0
Accepted
time: 292ms
memory: 3580kb

input:

7 77777777777777777

output:

impossible

result:

ok single line: 'impossible'

Test #20:

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

input:

6 1

output:

impossible

result:

ok single line: 'impossible'

Test #21:

score: 0
Accepted
time: 1ms
memory: 3472kb

input:

6 6

output:

impossible

result:

ok single line: 'impossible'

Test #22:

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

input:

6 666666666

output:

impossible

result:

ok single line: 'impossible'

Test #23:

score: 0
Accepted
time: 1557ms
memory: 3760kb

input:

6 982698952174251648

output:

3966 3967

result:

ok single line: '3966 3967'

Test #24:

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

input:

6 998905704529596381

output:

1 2

result:

ok single line: '1 2'

Test #25:

score: -100
Time Limit Exceeded

input:

6 1000000000000000000

output:


result: