QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#498628 | #9139. Prefix Divisible by Suffix | ucup-team004 | WA | 442ms | 3832kb | C++20 | 1.9kb | 2024-07-30 16:50:25 | 2024-07-30 16:50:26 |
Judging History
answer
#include <bits/stdc++.h>
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
i64 exgcd(i64 a, i64 b, i64 &x, i64 &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
i64 g = exgcd(b, a % b, y, x);
y -= a / b * x;
return g;
}
using i128 = __int128;
std::pair<i64, i64> merge(i64 m1, i64 a1, i64 m2, i64 a2) {
i64 x, y;
i64 g = exgcd(m1, m2, x, y);
if ((a2 - a1) % g != 0) {
return std::pair {0LL, 0LL};
}
i64 v = (a2 - a1) / g;
i128 m = i128 {m1} / g * m2;
i128 a = (i128 {x} * v % (m2 / g) * m1 + a1) % m;
if (a < 0) {
a += m;
}
m = std::min(m, i128(1E18) + 1);
a = std::min(a, i128(1E18));
return std::pair {m, a};
}
i64 pw10[15];
i64 dfs(i64 n, int c, int v, int len, int i, i64 m, i64 a) {
if (a > n) {
return 0LL;
}
i64 res = (n - a) / m + 1;
if (a < pw10[len]) {
res -= (pw10[len] - 1 - a) / m + 1;
}
for (int j = 1; j < i; j++) {
int v1 = v % pw10[j];
auto [m1, a1] = merge(m, a, (v1 + c) * pw10[j], v1);
if (m1 == 0) {
continue;
}
res -= dfs(n, c, v, len, j, m1, a1);
}
return res;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
pw10[0] = 1;
for (int i = 1; i <= 14; i++) {
pw10[i] = pw10[i - 1] * 10;
}
i64 n;
int c;
std::cin >> n >> c;
i64 ans = 0;
if (n == pw10[14]) {
if (pw10[13] % c == 0) {
ans++;
}
n--;
}
for (int len = 1; len <= 6; len++) {
for (int v = 0; v < pw10[len]; v++) {
ans += dfs(n, c, v, len, len, (v + c) * pw10[len], v);
}
}
std::cout << ans << "\n";
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3528kb
input:
20 1
output:
2
result:
ok 1 number(s): "2"
Test #2:
score: 0
Accepted
time: 1ms
memory: 3552kb
input:
111 4
output:
9
result:
ok 1 number(s): "9"
Test #3:
score: 0
Accepted
time: 3ms
memory: 3816kb
input:
1111 10
output:
75
result:
ok 1 number(s): "75"
Test #4:
score: 0
Accepted
time: 326ms
memory: 3828kb
input:
1000000 7
output:
111529
result:
ok 1 number(s): "111529"
Test #5:
score: 0
Accepted
time: 1ms
memory: 3616kb
input:
1 1
output:
0
result:
ok 1 number(s): "0"
Test #6:
score: 0
Accepted
time: 101ms
memory: 3820kb
input:
99999 10000
output:
0
result:
ok 1 number(s): "0"
Test #7:
score: 0
Accepted
time: 2ms
memory: 3832kb
input:
1000 1
output:
287
result:
ok 1 number(s): "287"
Test #8:
score: 0
Accepted
time: 323ms
memory: 3780kb
input:
10000000 1
output:
3102010
result:
ok 1 number(s): "3102010"
Test #9:
score: 0
Accepted
time: 323ms
memory: 3536kb
input:
100000000 1
output:
31035571
result:
ok 1 number(s): "31035571"
Test #10:
score: 0
Accepted
time: 324ms
memory: 3596kb
input:
1000000000 1
output:
310375697
result:
ok 1 number(s): "310375697"
Test #11:
score: 0
Accepted
time: 325ms
memory: 3772kb
input:
10000000000 1
output:
3103907933
result:
ok 1 number(s): "3103907933"
Test #12:
score: 0
Accepted
time: 325ms
memory: 3828kb
input:
100000000000 1
output:
31039265058
result:
ok 1 number(s): "31039265058"
Test #13:
score: 0
Accepted
time: 341ms
memory: 3812kb
input:
1000000000000 1
output:
310394177863
result:
ok 1 number(s): "310394177863"
Test #14:
score: 0
Accepted
time: 377ms
memory: 3556kb
input:
10000000000000 1
output:
3103943538348
result:
ok 1 number(s): "3103943538348"
Test #15:
score: -100
Wrong Answer
time: 442ms
memory: 3528kb
input:
100000000000000 1
output:
31039437486028
result:
wrong answer 1st numbers differ - expected: '31039449626535', found: '31039437486028'