QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#128738 | #6300. Best Carry Player 2 | lhzawa | WA | 198ms | 3680kb | C++14 | 2.4kb | 2023-07-21 15:24:54 | 2023-07-21 15:37:00 |
Judging History
answer
// lhzawa(https://www.cnblogs.com/lhzawa/)
// Problem: Best Carry Player 2
// Contest: Virtual Judge - QOJ
// URL: https://vjudge.net/problem/QOJ-6300
// Memory Limit: 1024 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<bits/stdc++.h>
using namespace std;
const int N = 38;
#define ll __int128
__int128 p10[N + 5];
char s[N];
int val[N];
void write(ll a) {
if (a > 9) {
write(a / 10);
}
putchar(a % 10 + '0');
return ;
}
__int128 f[N][N][2];
bool g[N][N][2];
void solve() {
int l;
scanf("%s%d", s, &l);
int n = strlen(s);
reverse(s, s + n);
for (int i = 0; i < n; i++) {
val[i] = s[i] - '0';
}
if (! l) {
for (int i = 0; i < n; i++) {
if (val[i] != 9) {
write(p10[i]), putchar('\n');
return ;
}
}
write(p10[n]), putchar('\n');
return ;
}
memset(g, 0, sizeof(g));
for (int i = 0; i < N; i++) {
for (int j = 0; j <= l; j++) {
for (int k = 0; k <= 1; k++) {
f[i][j][k] = p10[N];
}
}
}
f[0][0][0] = 0, g[0][0][0] = 1;
if (val[0]) {
f[0][1][1] = 10 - val[0], g[0][1][1] = 1;
}
__int128 ans = p10[N];
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j <= l; j++) {
for (int k = 0; k <= 1; k++) {
if (! g[i][j][k]) {
continue;
}
// printf("%d %d %d -> ", i, j, k);
// write(f[i][j][k]), putchar('\n');
if (j == l && val[i + 1] + k != 10) {
ans = min(ans, f[i][j][k]);
continue;
}
int v = val[i + 1] + k;
if (v == 10) {
// printf("%d %d %d -> %d %d %d\n", i, j, k, i + 1, j + 1, 1);
f[i + 1][j + 1][1] = min(f[i + 1][j + 1][1], f[i][j][k]), g[i + 1][j + 1][1] = 1;
}
else if (v == 0) {
// printf("%d %d %d -> %d %d %d\n", i, j, k, i + 1, j, 0);
f[i + 1][j][0] = min(f[i + 1][j][0], f[i][j][k]), g[i + 1][j][0] = 1;
}
else {
// printf("%d %d %d -> %d %d %d\n", i, j, k, i + 1, j, 0);
// printf("%d %d %d -> %d %d %d\n", i, j, k, i + 1, j + 1, 1);
f[i + 1][j][0] = min(f[i + 1][j][0], f[i][j][k]), g[i + 1][j][0] = 1;
f[i + 1][j + 1][1] = min(f[i + 1][j + 1][1], p10[i + 1] * (ll)(10 - v) + f[i][j][k]), g[i + 1][j + 1][1] = 1;
}
}
}
}
write(ans), putchar('\n');
return ;
}
int main() {
p10[0] = 1;
for (int i = 1; i <= N; i++) {
p10[i] = p10[i - 1] * (ll)(10);
}
int _;
scanf("%d", &_);
for (; _; _--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3680kb
input:
4 12345678 0 12345678 5 12345678 18 990099 5
output:
1 54322 999999999987654322 9910
result:
ok 4 lines
Test #2:
score: 0
Accepted
time: 1ms
memory: 3612kb
input:
21 999990000099999 0 999990000099999 1 999990000099999 2 999990000099999 3 999990000099999 4 999990000099999 5 999990000099999 6 999990000099999 7 999990000099999 8 999990000099999 9 999990000099999 10 999990000099999 11 999990000099999 12 999990000099999 13 999990000099999 14 999990000099999 15 999...
output:
100000 10000 1000 100 10 1 900001 9900001 99900001 999900001 10000000001 9999910000 9999901000 9999900100 9999900010 9999900001 9000009999900001 99000009999900001 999000009999900001 99999999999999999900000000000000000 1000000000000000000
result:
ok 21 lines
Test #3:
score: -100
Wrong Answer
time: 198ms
memory: 3616kb
input:
100000 119111011091190000 10 1911011191011999 16 110099199000119 0 19009911191091011 13 199090909919000900 17 19009010011919110 5 90910190019900091 18 10911100000101111 1 110090011101119990 4 100909999119090000 12 90901119109011100 2 111010119991090101 4 900991019109199009 5 100919919990991119 8 911...
output:
88988908810000 8088988808988001 10 88808908989 9800909090080999100 80890 809089809980099909 9 80010 9090000880910000 8900 9909 991 9008900 8880880090 8080090801 8009900808909899 80880898981 909 8800909 99988889901 89908888089 880908890980099000 100 9889801 81 808890008099900891 880990801 9998099 890...
result:
wrong answer 7th lines differ - expected: '909089809980099909', found: '809089809980099909'