QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#163609 | #5981. Costly Binary Search | NGC5457 | 27 ✓ | 12692ms | 91256kb | C++14 | 2.0kb | 2023-09-04 12:28:38 | 2023-09-04 12:28:39 |
Judging History
answer
/* 陽炎は黄泉に待たむと。*/
#include <bits/stdc++.h>
using namespace std;
#define inl inline
constexpr int BUF = 1<<19;
char ibuf[BUF], *__st, *__ed;
inl void buffer () { __st = ibuf,
__ed = ibuf + fread (ibuf, 1, BUF, stdin); }
inl char getc () {
return __st == __ed && (buffer (),
__st == __ed) ? EOF : *__st++; }
inl int read (char *s) {
static char c = getc ();
for (; ~c && isspace (c); c = getc ());
if (c == EOF) return 0; int len = 0;
for (; ~c && !isspace (c); c = getc ())
*s++ = c, ++len; return *s = 0, len;
}
typedef long long ll;
typedef unsigned long long ull;
// typedef __int128 lll;
// typedef long double llf;
typedef pair <int, int> pint;
#define fst first
#define scd second
#define all(p) begin (p), end (p)
#define empb emplace_back
#ifdef SHIKEN
#define msg(args...) fprintf (stderr, args)
#else
#define msg(...) void ()
#endif
constexpr int N = 1e6 + 10, INF = 0x3f3f3f3f;
int _lbd[10][N], _rbd[10][N], T, n, f[N], g[N]; char a[N];
inl void gomn (int &x, int y) { if (x > y) x = y; }
inl void gomx (int &x, int y) { if (x < y) x = y; }
int main () {
/* */
int *lbd[200], *rbd[200];
for (int i = 0; i < 200; ++i)
lbd[i] = _lbd[i % 10],
rbd[i] = _rbd[i % 10];
scanf ("%d", &T);
for (int t = 1; t <= T; ++t) {
n = read (a + 1); int c = 0, ans = INF;
memset (_lbd, 0x3f, sizeof _lbd);
memset (_rbd, ~0x3f, sizeof _rbd);
for (int i = 1; i <= n; ++i)
a[i] -= '0', f[i] = g[i] = i;
while (c < ans) {
for (int i = 1, r = rbd[c][0]; i <= n; ++i) {
if (rbd[c][i] > r) r = rbd[c][i];
if (g[i] < r) g[i] = r;
}
for (int i = n, l = lbd[c][n + 1]; i; --i) {
if (lbd[c][i] < l) l = lbd[c][i];
if (l < f[i]) f[i] = l;
if (f[i] == 1 && g[i] == n)
ans = min (ans, a[i] + c);
}
for (int i = 1; i <= n; ++i) {
gomn (lbd[c + a[i]][g[i] + 1], f[i]);
gomx (rbd[c + a[i]][f[i] - 1], g[i]);
}
memset (lbd[c], 0x3f, sizeof _lbd[0]);
memset (rbd[c], ~0x3f, sizeof _rbd[0]);
++c;
}
printf ("Case #%d: %d\n", t, ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 8
Accepted
Test #1:
score: 8
Accepted
time: 1442ms
memory: 85784kb
input:
50 8 5128831164925953487661279378526736416489768154389124821528467927357884749642747626797857463132866343496157991453139582295398452863172464853698678624523849653538713928372648295734165346972222781179687541337591976277864785653638476127839556323849395641196246971351933655287441377531627938395427487...
output:
Case #1: 8 Case #2: 37 Case #3: 34 Case #4: 37 Case #5: 34 Case #6: 114 Case #7: 126 Case #8: 24 Case #9: 37 Case #10: 103 Case #11: 36 Case #12: 64 Case #13: 37 Case #14: 117 Case #15: 37 Case #16: 35 Case #17: 14 Case #18: 34 Case #19: 36 Case #20: 37 Case #21: 38 Case #22: 39 Case #23: 14 Case #2...
result:
ok 50 lines
Subtask #2:
score: 19
Accepted
Test #2:
score: 19
Accepted
time: 12692ms
memory: 91256kb
input:
50 647322722753778843259213887674615134214258235986992692879314555957455541351526284343217116351733247781713552149464672262787737941588358671583528664757823365936975517145283412965139791726299864122725212222496898855627124979178341548651669956711341742838725446489235961853391195148929571712449139335...
output:
Case #1: 42 Case #2: 43 Case #3: 120 Case #4: 42 Case #5: 43 Case #6: 43 Case #7: 31 Case #8: 43 Case #9: 171 Case #10: 42 Case #11: 39 Case #12: 42 Case #13: 42 Case #14: 44 Case #15: 39 Case #16: 20 Case #17: 180 Case #18: 30 Case #19: 45 Case #20: 43 Case #21: 44 Case #22: 31 Case #23: 83 Case #2...
result:
ok 50 lines
Extra Test:
score: 0
Extra Test Passed