QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#103606 | #6300. Best Carry Player 2 | MIT01# | WA | 2ms | 3340kb | C++17 | 1.9kb | 2023-05-07 04:06:52 | 2023-05-07 04:06:53 |
Judging History
answer
#pragma GCC optimize("-Ofast","-ffast-math","-funroll-all-loops")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pl pair<ll, ll>
#define db double
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mod 998244353
#define vi vector<int>
const int maxn = 2000005;
const int S = 19;
template<typename T> bool chkmin(T &a, T b) {
return (b < a) ? (a = b, 1) : 0;
}
template<typename T> bool chkmax(T &a, T b) {
return (b > a) ? (a = b, 1) : 0;
}
ll dp[S + 2][3][S]; // next undet: i; j many <
int main() {
int t;
cin >> t;
while (t--) {
ll x;
int k;
cin >> x >> k;
vi cur;
ll stx = x;
for (int j = 0; j < S; j++) {
cur.pb(x % 10);
x /= 10;
}
const ll inf = 3e18;
for (int i = 0; i < S + 2; i++)
for (int j = 0; j < 3; j++)
for (int k = 0; k < S; k++)
dp[i][j][k] = inf;
dp[0][1][0] = 0;
ll pw = 1;
for (int i = 0; i < S; i++) {
for (int u = 0; u < 3; u++)
for (int v = 0; v < S; v++) {
if (dp[i][u][v] > inf) continue;
for (int w = 0; w < 10; w++) {
if (i == S - 1 && w >= 4) continue;
ll cc = dp[i][u][v] + w * pw;
int eu = 0, ev = v;
if (w > cur[i]) eu = 2;
else if (w == cur[i]) eu = u;
else eu = 0;
if (!eu) ev += 1;
chkmin(dp[i + 1][eu][ev], cc);
}
}
pw = pw * 10;
}
cout << dp[S][2][k] - stx << '\n';
}
return 0;
}
/*
4
12345678 0
12345678 5
12345678 18
990099 5
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3340kb
input:
4 12345678 0 12345678 5 12345678 18 990099 5
output:
1 54322 999999999987654322 9910
result:
ok 4 lines
Test #2:
score: -100
Wrong Answer
time: 2ms
memory: 3340kb
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 2900000000000000000 1000000000000000000
result:
wrong answer 20th lines differ - expected: '99999999999999999900000000000000000', found: '2900000000000000000'