QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#5831 | #273. 类欧几里得算法 | Lenstar | 100 ✓ | 313ms | 3720kb | C++17 | 3.4kb | 2021-01-22 00:14:18 | 2021-12-19 07:01:09 |
Judging History
answer
#include <bits/stdc++.h>
const int N = 13, M = 60, Mod = 1e9 + 7;
inline int read()
{
int x = 0, f = 0;
char ch = getchar();
while (!isdigit(ch))
f |= ch == '-', ch = getchar();
while (isdigit(ch))
x = x * 10 + ch - '0', ch = getchar();
return f ? -x : x;
}
inline int Pow(int a, int b)
{
int res = 1;
for (; b; b >>= 1, a = 1LL * a * a % Mod)
if (b & 1)
res = 1LL * res * a % Mod;
return res;
}
int a[N], b[N], A[N][N], comb[N][N], f[N][N][61];
inline void poly(int *f, int n)
{
for (int i = 0; i <= n; ++i)
{
int w = a[i];
for (int j = 0; j <= n; ++j)
b[j] = 0;
b[0] = 1;
for (int j = 0; j <= i - 1; ++j)
w = 1LL * w * Pow(i - j, Mod - 2) % Mod;
for (int j = i + 1; j <= n; ++j)
w = Mod - 1LL * w * Pow(j - i, Mod - 2) % Mod;
for (int j = 0; j <= n; ++j)
if (i != j)
{
for (int k = n; k >= 1; --k)
b[k] = (b[k - 1] - 1LL * b[k] * j % Mod + Mod) % Mod;
b[0] = Mod - 1LL * b[0] * j % Mod;
}
for (int j = 0; j <= n; ++j)
(f[j] += 1LL * w * b[j] % Mod) %= Mod;
}
}
inline int calc(int n, int a)
{
int w = 1, res = 0;
for (int i = 0; i <= n + 1; ++i)
(res += 1LL * A[n][i] * w % Mod) %= Mod, w = 1LL * w * a % Mod;
return res;
}
inline void init()
{
for (int i = 0; i <= 10; ++i)
{
a[0] = i == 0;
for (int j = 1; j <= i + 1; ++j)
a[j] = (a[j - 1] + Pow(j, i)) % Mod;
poly(A[i], i + 1);
}
// for (int i = 0; i <= 10; ++i, putchar('\n'))
// for (int j = 0; j <= i + 1; ++j) printf("%d ", A[i][j]);
for (int i = 0; i <= 10; ++i)
{
comb[i][0] = 1;
for (int j = 1; j <= i; ++j)
comb[i][j] = (comb[i - 1][j] + comb[i - 1][j - 1]) % Mod;
}
}
inline int solve(int a, int b, int c, int k1, int k2, int n, int d)
{
if (!a)
return 1LL * calc(k1, n) * Pow(b / c, k2) % Mod;
if (f[k1][k2][d] != -1)
return f[k1][k2][d];
if (a >= c)
{
int res = 0;
for (int i = 0; i <= k2; ++i)
{
int w = 1LL * comb[k2][i] * Pow(a / c, i) % Mod;
(res += 1LL * w * solve(a % c, b, c, k1 + i, k2 - i, n, d + 1) % Mod) %= Mod;
}
return res;
}
if (b >= c)
{
int res = 0;
for (int i = 0; i <= k2; ++i)
{
int w = 1LL * comb[k2][i] * Pow(b / c, i) % Mod;
(res += 1LL * w * solve(a, b % c, c, k1, k2 - i, n, d + 1) % Mod) %= Mod;
}
return res;
}
int m = (1LL * a * n + b) / c, ans = 1LL * Pow(m, k2) * calc(k1, n) % Mod, res = 0;
for (int j = 0; j < k2; ++j)
for (int i = 0; i <= k1 + 1; ++i)
(res += 1LL * comb[k2][j] * A[k1][i] % Mod * solve(c, c - b - 1, a, j, i, m - 1, d + 1) % Mod) %= Mod;
return f[k1][k2][d] = (ans - res + Mod) % Mod;
}
int main()
{
int T = read();
init();
for (int i = 0; i < T; ++i)
{
int n = read(), a = read(), b = read(), c = read(), k1 = read(), k2 = read();
memset(f, -1, sizeof(f)), printf("%d\n", solve(a, b, c, k1, k2, n, 0));
}
return 0;
}
詳細信息
Test #1:
score: 10
Accepted
time: 6ms
memory: 3592kb
input:
1000 846930887 681692778 714636916 89384 0 1 424238336 719885387 649760493 47794 0 1 189641422 25202363 350490028 16650 0 1 102520060 44897764 967513927 68691 0 1 540383427 304089173 303455737 80541 0 1 521595369 294702568 726956430 5212 0 1 861021531 278722863 233665124 65783 0 1 468703136 101513930 801979803 74068 0 1 635723059 369133070 125898168 34023 0 1 89018457 628175012 656478043 61394 0 1 653377374 859484422 914544920 76230 0 1 756898538 734575199 973594325 13785 0 1 38664371 129566414 ...
output:
787440837 603410377 723035859 327613252 213481743 197744321 183595532 306097937 945612263 462240557 878873337 913033603 276973800 137776104 471637127 36869524 59950373 599468074 662996688 39221965 159523453 603757410 863747292 125209174 321695224 581226543 502962761 546511215 492741651 881346590 834005126 30892292 970172486 534011850 884663238 447858712 669344073 672816965 745462701 723944717 619806513 16101424 226174994 142137015 334071499 704597762 61328763 953156726 492611642 937147687 453460...
result:
ok 1000 numbers
Test #2:
score: 10
Accepted
time: 2ms
memory: 3592kb
input:
1000 846930887 681692778 714636916 89384 0 1 424238336 719885387 649760493 47794 0 1 189641422 25202363 350490028 16650 0 1 102520060 44897764 967513927 68691 0 1 540383427 304089173 303455737 80541 0 1 521595369 294702568 726956430 5212 0 1 861021531 278722863 233665124 65783 0 1 468703136 101513930 801979803 74068 0 1 635723059 369133070 125898168 34023 0 1 89018457 628175012 656478043 61394 0 1 653377374 859484422 914544920 76230 0 1 756898538 734575199 973594325 13785 0 1 38664371 129566414 ...
output:
787440837 603410377 723035859 327613252 213481743 197744321 183595532 306097937 945612263 462240557 878873337 913033603 276973800 137776104 471637127 36869524 59950373 599468074 662996688 39221965 159523453 603757410 863747292 125209174 321695224 581226543 502962761 546511215 492741651 881346590 834005126 30892292 970172486 534011850 884663238 447858712 669344073 672816965 745462701 723944717 619806513 16101424 226174994 142137015 334071499 704597762 61328763 953156726 492611642 937147687 453460...
result:
ok 1000 numbers
Test #3:
score: 10
Accepted
time: 4ms
memory: 3608kb
input:
1000 846930887 681692778 714636916 89384 1 0 649760493 596516650 189641422 85387 0 1 102520060 44897764 967513927 68691 0 0 303455737 35005212 521595369 89173 1 0 861021531 278722863 233665124 65783 1 0 801979803 315634023 635723059 13930 1 0 89018457 628175012 656478043 61394 1 0 914544920 608413785 756898538 84422 0 0 38664371 129566414 184803527 98316 1 0 749241874 137806863 42999171 59957 0 1 84420926 937477085 827336328 2306 0 1 632621730 100661314 433925858 50847 0 1 1100546 998898815 5482...
output:
590247101 607294734 102520061 988535616 258549494 359848706 860104659 914544921 806512744 219134560 36869524 54386320 1100547 760313752 603757410 510232691 82579690 843146721 36876088 935671592 290199337 365292116 534011850 126900199 669344073 690573152 719144156 644864030 602224207 100895714 45206689 434041280 264907171 256823057 67854540 733119495 180252342 820912308 272469788 361410843 37127830 149878627 396473732 434248628 188213260 521443703 606206963 696562451 871976529 967681097 27673816 ...
result:
ok 1000 numbers
Test #4:
score: 10
Accepted
time: 4ms
memory: 3716kb
input:
1000 846930887 681692778 714636916 89384 1 0 649760493 596516650 189641422 85387 0 1 102520060 44897764 967513927 68691 0 0 303455737 35005212 521595369 89173 1 0 861021531 278722863 233665124 65783 1 0 801979803 315634023 635723059 13930 1 0 89018457 628175012 656478043 61394 1 0 914544920 608413785 756898538 84422 0 0 38664371 129566414 184803527 98316 1 0 749241874 137806863 42999171 59957 0 1 84420926 937477085 827336328 2306 0 1 632621730 100661314 433925858 50847 0 1 1100546 998898815 5482...
output:
590247101 607294734 102520061 988535616 258549494 359848706 860104659 914544921 806512744 219134560 36869524 54386320 1100547 760313752 603757410 510232691 82579690 843146721 36876088 935671592 290199337 365292116 534011850 126900199 669344073 690573152 719144156 644864030 602224207 100895714 45206689 434041280 264907171 256823057 67854540 733119495 180252342 820912308 272469788 361410843 37127830 149878627 396473732 434248628 188213260 521443703 606206963 696562451 871976529 967681097 27673816 ...
result:
ok 1000 numbers
Test #5:
score: 10
Accepted
time: 305ms
memory: 3648kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers
Test #6:
score: 10
Accepted
time: 313ms
memory: 3612kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers
Test #7:
score: 10
Accepted
time: 305ms
memory: 3708kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers
Test #8:
score: 10
Accepted
time: 295ms
memory: 3604kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers
Test #9:
score: 10
Accepted
time: 306ms
memory: 3720kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers
Test #10:
score: 10
Accepted
time: 308ms
memory: 3608kb
input:
1000 846930887 681692778 714636916 89384 3 3 649760493 596516650 189641422 85387 2 3 102520060 44897764 967513927 68691 0 6 303455737 35005212 521595369 89173 7 0 861021531 278722863 233665124 65783 7 1 801979803 315634023 635723059 13930 9 0 89018457 628175012 656478043 61394 9 0 914544920 608413785 756898538 84422 8 0 38664371 129566414 184803527 98316 1 8 749241874 137806863 42999171 59957 6 1 84420926 937477085 827336328 2306 6 1 632621730 100661314 433925858 50847 4 3 1100546 998898815 5482...
output:
269986411 687117872 337796106 649269006 273534477 925890819 789776059 781917067 471414212 683680813 655243026 766680733 110386800 920667633 42177293 33248798 268698025 97602241 455950431 787378605 628127823 884695308 910301084 481441390 301149571 40678494 744524425 997602040 853435603 942399367 437197384 491152627 302759221 595113582 980957231 512095135 821264982 72897687 680504857 919780751 600132259 164276457 84297631 233540234 684833766 59063866 487526620 501600706 330160466 473938797 6686221...
result:
ok 1000 numbers