QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#178796 | #1219. 你的名字 | hos_lyric | 100 ✓ | 1541ms | 164276kb | C++14 | 14.2kb | 2023-09-14 13:33:30 | 2023-09-14 13:33:31 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
////////////////////////////////////////////////////////////////////////////////
// SA-IS
// String: string, vector<int>, vector<long long>
// if sigma <= n, O(n) time, O(n) space
// if sigma > n, O(n log n) time, O(n) space
template <class String> vector<int> suffixArrayRec(const String &as) {
const int n = as.size();
if (n == 0) return {};
const auto minmaxA = minmax_element(as.begin(), as.end());
const auto minA = *minmaxA.first, maxA = *minmaxA.second;
if (static_cast<unsigned long long>(maxA) - minA >=
static_cast<unsigned long long>(n)) {
vector<int> us(n);
for (int u = 0; u < n; ++u) us[u] = u;
std::sort(us.begin(), us.end(), [&](int u, int v) -> bool {
return (as[u] < as[v]);
});
int b = 0;
vector<int> bs(n, 0);
for (int i = 1; i < n; ++i) {
if (as[us[i - 1]] != as[us[i]]) ++b;
bs[us[i]] = b;
}
return suffixArrayRec(bs);
}
const int sigma = maxA - minA + 1;
vector<int> pt(sigma + 1, 0), poss(sigma);
for (int u = 0; u < n; ++u) ++pt[as[u] - minA + 1];
for (int a = 0; a < sigma; ++a) pt[a + 1] += pt[a];
// cmp[u] := (as[u, n) < as[u + 1, n))
vector<bool> cmp(n);
cmp[n - 1] = false;
for (int u = n - 1; --u >= 0; ) {
cmp[u] = (as[u] != as[u + 1]) ? (as[u] < as[u + 1]) : cmp[u + 1];
}
// ><, nn - id (0 <= id < n)
int nn = 0;
vector<int> ids(n, 0);
int last = n;
vector<int> nxt(n, 0);
// put ><, from the tail of each bucket
vector<int> us(n, 0);
memcpy(poss.data(), pt.data() + 1, sigma * sizeof(int));
for (int u = n - 1; --u >= 1; ) if (!cmp[u - 1] && cmp[u]) {
ids[u] = ++nn;
nxt[u] = last;
last = u;
us[--poss[as[u] - minA]] = u;
}
// follow > backwards, from the head of each bucket
memcpy(poss.data(), pt.data(), sigma * sizeof(int));
us[poss[as[n - 1] - minA]++] = n - 1;
for (int i = 0; i < n; ++i) {
const int u = us[i];
if (u && !cmp[u - 1]) us[poss[as[u - 1] - minA]++] = u - 1;
}
// follow < backwards, from the tail of each bucket
memcpy(poss.data(), pt.data() + 1, sigma * sizeof(int));
for (int i = n; --i >= 0; ) {
const int u = us[i];
if (u && cmp[u - 1]) us[--poss[as[u - 1] - minA]] = u - 1;
}
if (nn) {
int vsLen = 0;
vector<int> vs(nn);
for (const int u : us) if (ids[u]) vs[vsLen++] = u;
int b = 0;
vector<int> bs(nn, 0);
for (int j = 1; j < nn; ++j) {
// as[v1, w1] (< or =) as[v0, w0]
int v1 = vs[j - 1], v0 = vs[j];
const int w1 = nxt[v1], w0 = nxt[v0];
if (w1 - v1 != w0 - v0) {
++b;
} else {
for (; ; ++v1, ++v0) {
if (v1 == n) { ++b; break; }
if (as[v1] != as[v0]) { ++b; break; }
if (v1 == w1) break;
}
}
bs[nn - ids[vs[j]]] = b;
}
for (int u = 0; u < n; ++u) if (ids[u]) vs[nn - ids[u]] = u;
const auto sub = suffixArrayRec(bs);
// put ><, from the tail of each bucket
memset(us.data(), 0, n * sizeof(int));
memcpy(poss.data(), pt.data() + 1, sigma * sizeof(int));
for (int j = nn; --j >= 0; ) {
const int u = vs[sub[j]];
us[--poss[as[u] - minA]] = u;
}
// follow > backwards, from the head of each bucket
memcpy(poss.data(), pt.data(), sigma * sizeof(int));
us[poss[as[n - 1] - minA]++] = n - 1;
for (int i = 0; i < n; ++i) {
const int u = us[i];
if (u && !cmp[u - 1]) us[poss[as[u - 1] - minA]++] = u - 1;
}
// follow < backwards, from the tail of each bucket
memcpy(poss.data(), pt.data() + 1, sigma * sizeof(int));
for (int i = n; --i >= 0; ) {
const int u = us[i];
if (u && cmp[u - 1]) us[--poss[as[u - 1] - minA]] = u - 1;
}
}
return us;
}
// us[i]: i-th suffix
// su[u]: index of as[u, n)
// hs[i]: longest common prefix of as[us[i - 1], n) and as[us[i], n)
struct SuffixArray {
int n;
bool rmq;
vector<int> us, su, hs, bsr;
SuffixArray() : n(0), rmq(false) {}
SuffixArray(const string &as, bool rmq_) : rmq(rmq_) { build(as); }
SuffixArray(const vector<int> &as, bool rmq_) : rmq(rmq_) { build(as); }
SuffixArray(const vector<long long> &as, bool rmq_) : rmq(rmq_) { build(as); }
template <class String> void build(const String &as) {
n = as.size();
us = suffixArrayRec(as);
su.resize(n + 1);
for (int i = 0; i < n; ++i) su[us[i]] = i;
su[n] = -1;
hs.assign(n, 0);
for (int h = 0, u = 0; u < n; ++u) if (su[u]) {
for (int v = us[su[u] - 1]; v + h < n && as[v + h] == as[u + h]; ++h) {}
hs[su[u]] = h;
if (h) --h;
}
if (rmq) {
const int logN = n ? (31 - __builtin_clz(n)) : 0;
hs.resize((logN + 1) * n - (1 << logN) + 1);
for (int e = 0; e < logN; ++e) {
int *hes = hs.data() + e * n;
for (int i = 0; i <= n - (1 << (e + 1)); ++i) {
hes[n + i] = min(hes[i], hes[i + (1 << e)]);
}
}
bsr.resize(n + 1);
bsr[0] = -1;
for (int i = 1; i <= n; ++i) bsr[i] = bsr[i >> 1] + 1;
}
}
// Returns longest common prefix of as[u, n) and as[v, n).
// 0 <= u, v <= n
// Assumes rmq.
inline int lcp(int u, int v) const {
if (u == v) return n - u;
int i = su[u], j = su[v];
if (i > j) swap(i, j);
const int e = bsr[j - i];
return min(hs[e * n + i + 1], hs[e * n + j + 1 - (1 << e)]);
}
};
////////////////////////////////////////////////////////////////////////////////
// T: monoid representing information of an interval.
// T() should return the identity.
// T(S s) should represent a single element of the array.
// T::pull(const T &l, const T &r) should pull two intervals.
template <class T> struct SegmentTreePoint {
int logN, n;
vector<T> ts;
SegmentTreePoint() : logN(0), n(0) {}
explicit SegmentTreePoint(int n_) {
for (logN = 0, n = 1; n < n_; ++logN, n <<= 1) {}
ts.resize(n << 1);
}
template <class S> explicit SegmentTreePoint(const vector<S> &ss) {
const int n_ = ss.size();
for (logN = 0, n = 1; n < n_; ++logN, n <<= 1) {}
ts.resize(n << 1);
for (int i = 0; i < n_; ++i) at(i) = T(ss[i]);
build();
}
T &at(int i) {
return ts[n + i];
}
void build() {
for (int u = n; --u; ) pull(u);
}
inline void pull(int u) {
ts[u].pull(ts[u << 1], ts[u << 1 | 1]);
}
// Changes the value of point a to s.
template <class S> void change(int a, const S &s) {
assert(0 <= a); assert(a < n);
ts[a += n] = T(s);
for (; a >>= 1; ) pull(a);
}
// Applies T::f(args...) to point a.
template <class F, class... Args>
void ch(int a, F f, Args &&... args) {
assert(0 <= a); assert(a < n);
(ts[a += n].*f)(args...);
for (; a >>= 1; ) pull(a);
}
// Calculates the product for [a, b).
T get(int a, int b) {
assert(0 <= a); assert(a <= b); assert(b <= n);
if (a == b) return T();
a += n; b += n;
T prodL, prodR, t;
for (int aa = a, bb = b; aa < bb; aa >>= 1, bb >>= 1) {
if (aa & 1) { t.pull(prodL, ts[aa++]); prodL = t; }
if (bb & 1) { t.pull(ts[--bb], prodR); prodR = t; }
}
t.pull(prodL, prodR);
return t;
}
// Calculates T::f(args...) of a monoid type for [a, b).
// op(-, -) should calculate the product.
// e() should return the identity.
template <class Op, class E, class F, class... Args>
#if __cplusplus >= 201402L
auto
#else
decltype((std::declval<T>().*F())())
#endif
get(int a, int b, Op op, E e, F f, Args &&... args) {
assert(0 <= a); assert(a <= b); assert(b <= n);
if (a == b) return e();
a += n; b += n;
auto prodL = e(), prodR = e();
for (int aa = a, bb = b; aa < bb; aa >>= 1, bb >>= 1) {
if (aa & 1) prodL = op(prodL, (ts[aa++].*f)(args...));
if (bb & 1) prodR = op((ts[--bb].*f)(args...), prodR);
}
return op(prodL, prodR);
}
// Find min b s.t. T::f(args...) returns true,
// when called for the partition of [a, b) from left to right.
// Returns n + 1 if there is no such b.
template <class F, class... Args>
int findRight(int a, F f, Args &&... args) {
assert(0 <= a); assert(a <= n);
if ((T().*f)(args...)) return a;
if (a == n) return n + 1;
a += n;
for (; ; a >>= 1) if (a & 1) {
if ((ts[a].*f)(args...)) {
for (; a < n; ) {
if (!(ts[a <<= 1].*f)(args...)) ++a;
}
return a - n + 1;
}
++a;
if (!(a & (a - 1))) return n + 1;
}
}
// Find max a s.t. T::f(args...) returns true,
// when called for the partition of [a, b) from right to left.
// Returns -1 if there is no such a.
template <class F, class... Args>
int findLeft(int b, F f, Args &&... args) {
assert(0 <= b); assert(b <= n);
if ((T().*f)(args...)) return b;
if (b == 0) return -1;
b += n;
for (; ; b >>= 1) if ((b & 1) || b == 2) {
if ((ts[b - 1].*f)(args...)) {
for (; b <= n; ) {
if (!(ts[(b <<= 1) - 1].*f)(args...)) --b;
}
return b - n - 1;
}
--b;
if (!(b & (b - 1))) return -1;
}
}
};
////////////////////////////////////////////////////////////////////////////////
constexpr int INF = 1001001001;
struct NodeMin {
int mn;
NodeMin() : mn(+INF) {}
NodeMin(int val) : mn(val) {}
void pull(const NodeMin &l, const NodeMin &r) {
mn = min(l.mn, r.mn);
}
void ch(int val) {
mn = val;
}
void chmin(int val) {
if (mn > val) mn = val;
}
bool test(int tar) const {
return (mn <= tar);
}
};
struct NodeMax {
int mx;
NodeMax() : mx(-INF) {}
NodeMax(int val) : mx(val) {}
void pull(const NodeMax &l, const NodeMax &r) {
mx = max(l.mx, r.mx);
}
void ch(int val) {
mx = val;
}
void chmax(int val) {
if (mx < val) mx = val;
}
bool test(int tar) const {
return (mx >= tar);
}
};
////////////////////////////////////////////////////////////////////////////////
char buf[1'000'010];
int M;
string S;
int Q;
vector<string> T;
vector<int> L, R;
namespace brute {
vector<Int> run() {
vector<Int> ans(Q, 0);
for (int q = 0; q < Q; ++q) {
const string s = S.substr(L[q], R[q] - L[q]);
const int TLen = T[q].size();
set<string> ts;
for (int i = 0; i <= TLen; ++i) for (int j = i + 1; j <= TLen; ++j) {
const string t = T[q].substr(i, j - i);
if (!~s.find(t)) {
ts.insert(t);
}
}
ans[q] = ts.size();
}
return ans;
}
} // brute
namespace fast {
vector<Int> run() {
string cat = S + '!';
vector<int> N(Q), P(Q);
for (int q = 0; q < Q; ++q) {
N[q] = T[q].size();
P[q] = cat.size();
cat += T[q];
cat += '#';
}
const SuffixArray sa(cat, true);
vector<int> qs(sa.n, -1);
for (int q = 0; q < Q; ++q) {
for (int u = P[q]; u < P[q] + N[q]; ++u) {
qs[u] = q;
}
}
SegmentTreePoint<NodeMax> segHead(M);
SegmentTreePoint<NodeMin> segTail(M);
for (int i = 0; i < sa.n; ++i) {
const int u = sa.us[i];
if (u < M) {
segTail.at(u) = i;
}
}
segTail.build();
vector<int> last(Q, -1);
vector<Int> ans(Q, 0);
for (int i = 0; i < sa.n; ++i) {
// cerr<<(i/10)<<(i%10)<<" "<<cat.substr(sa.us[i])<<endl;
const int u = sa.us[i];
if (u < M) {
segHead.change(u, i);
segTail.change(u, INF);
} else {
const int q = qs[u];
if (~q) {
auto isBad = [&](int k) -> bool {
if (L[q] + k <= R[q]) {
{
const int res = segHead.get(L[q], R[q] - k + 1).mx;
if (res >= 0 && sa.lcp(u, sa.us[res]) >= k) return true;
}
{
const int res = segTail.get(L[q], R[q] - k + 1).mn;
if (res < sa.n && sa.lcp(u, sa.us[res]) >= k) return true;
}
}
return false;
};
int lo = (~last[q]) ? sa.lcp(last[q], u) : 0;
int hi = N[q] - (u - P[q]) + 1;
for (; lo + 1 < hi; ) {
const int mid = (lo + hi) / 2;
(isBad(mid) ? lo : hi) = mid;
}
// cerr<<COLOR("33")<<" q = "<<q<<", lo = "<<lo<<", ans[q] += "<<(max(N[q] - ((u - P[q]) + lo), 0))<<COLOR()<<endl;
ans[q] += max(N[q] - ((u - P[q]) + lo), 0);
last[q] = u;
}
}
}
return ans;
}
} // fast
int main() {
for (; ~scanf("%s", buf); ) {
S = buf;
scanf("%d", &Q);
T.resize(Q);
L.resize(Q);
R.resize(Q);
for (int q = 0; q < Q; ++q) {
scanf("%s%d%d", buf, &L[q], &R[q]);
T[q] = buf;
--L[q];
}
M = S.size();
cerr<<"M = "<<M<<", Q = "<<Q<<endl;
const auto ans = fast::run();
for (int q = 0; q < Q; ++q) {
printf("%lld\n", ans[q]);
}
#ifdef LOCAL
if(M<=200){
const auto brt=brute::run();
for(int q=0;q<Q;++q)if(brt[q]!=ans[q]){
cerr<<S<<" "<<T[q]<<" "<<L[q]<<" "<<R[q]<<": "<<brt[q]<<" "<<ans[q]<<endl;
break;
}
assert(brt==ans);
}
#endif
}
return 0;
}
详细
Test #1:
score: 4
Accepted
time: 9ms
memory: 6068kb
input:
aadccabccdcddcdabbbdbdaabcadbcadcccdcadbadaabaaacbacdcdccdcdabbbdbdaadcabdabdbacabdadadbdadbdcddbcbcbaddaaaabccdaddcaaabdbabbcabdbcdccaaddbdcdbbcaccdababdbbdabdcbcccacbddddaacbaccaacadbdbdcabc 190 acdabdbcdcabbacbdacaccbcaddadabccdaabdcdcbcdaadccadcdcaccdcaadcaaddccddbbbadbadbdcaacccdbbbcbdbabcacacb...
output:
18746 19133 18512 18928 17590 17762 17395 18333 17397 18159 18708 19076 18526 18931 17953 18684 17555 17937 17602 18932 17972 17768 17746 18939 18728 18167 17957 18718 18486 18170 17597 18174 17368 17591 17579 18364 18741 19150 17426 18514 17961 17398 18123 18742 17775 17402 19132 18151 18738 17418 ...
result:
ok 190 lines
Test #2:
score: 4
Accepted
time: 14ms
memory: 6468kb
input:
adbdadddcaddcdaacabadbbbacccaadddcdabaaccbbcbacccbdcdbaabbcbddcdadcabcacccccddbdabbbaacaadcdaddbabcabbbddcdccbaddbbbcdbcabdaaabbdaaadcdacbabccdadbabbdaddcbccddadbdcabcdaabbbabcdacbcaaccabcbaabcbcddcddbbbbaadacbddabbdddabbddbcbdabccbbdacbbdccdbddcdcdcadadbbacbdabbbcddcbadcdddaaabdbbdadddaabbdbaaccdab...
output:
17803 18533 18159 17409 17751 18527 17214 18141 18343 17601 18158 17623 18721 18552 18945 17413 17228 17577 18527 18694 17413 17564 17999 18521 18545 17400 18354 17384 18378 18159 17415 18907 17410 17594 17365 18126 17764 18370 17220 18352 18338 17616 17400 17244 18945 18201 17957 17774 18918 17970 ...
result:
ok 191 lines
Test #3:
score: 4
Accepted
time: 11ms
memory: 6384kb
input:
abbabcabadbcbbccbabdcbbacdddcccddadabcadabaadcaddbaaccacaabcbbbcabbbdcbadbaadccdbbdbaaccadbbabdccbcaabbaaccabcbabbcaacbdbbadadbdcbddbbcddcaaacbadabbaacaadddacbadbbddaabbcaccdbdabbcdbbccadccaadabccdaddcabbabadadabdbbadacadcaacbcdccdccaddaacdccbacadaccdbccddacbdcabadbcbbaaccbbabcddccdaabacbcbdbcbdbddb...
output:
18912 18173 17219 18910 18551 18349 17395 17373 17739 17934 17975 17576 17237 18552 18712 18941 17913 17203 17385 18945 18568 17180 18135 17208 17989 17984 18347 17798 17974 18909 18159 18724 18558 18540 18761 17987 18512 18388 18171 18352 17435 18936 18151 17765 17772 17225 18750 18553 18166 17965 ...
result:
ok 198 lines
Test #4:
score: 4
Accepted
time: 298ms
memory: 46364kb
input:
ddadbccdbdaacdacabdadadcbdbbadddcadbdadddcaddbbacbddddacccccbcabbbdaddcacbbcaaadaaddadadddbadabbadcdbacbdaddadbbbbccdbacaaabcacccdccaaabaddababacdbaccbbbddaabaacadbcddbbcaaccbbbbbdaddaabddbcdbaacbcadbdbccbcbbdacdacbbbcdccadcdbaacbcaadbabadcaccabdddacacabdbcdadccaddcdcaaabcacccbdbdadcbdcabddabbdabdcd...
output:
2894585 2991616 2979335 3050618 2815847 3097694 2950143 2865797 2830060 2947789 2811062 3067958 3030865 2892211 2861038 2977006 3070490 3023569 3023484 2913801 2913793 2825275 2825292 2923566 2880180 2991687 3028451 3072797 2925914 2957369 2837214 3026044 3035938 3033378 2996555 2994152 3043224 2964...
result:
ok 197 lines
Test #5:
score: 4
Accepted
time: 312ms
memory: 45208kb
input:
bacccaaabdacddbbabdabccbdabddccdbcdcdbdbccbddbbcaaddaacdcaaadcbcaddbabbaddaaaddaaccdcaccacababccaddaccbcacbbdccabaacacdcbccbdbadcdbbbbacacdcbbbbaadbcbaadbcadadbbddbccaadbdbcbabdaacdcdacdbcdbdccdabbacbddabcabccbbabcddbdddcaabbcaddbbdabcaddbbcaadabcbdcabcacdaabbdddadaacbbccdbccdabbdcaddddcccdaaaaddada...
output:
2969627 2930836 3090327 2969685 2940547 2959956 2913833 2822831 3001405 2938139 3023485 2998971 2952629 3075473 2844312 2858668 2911472 3053170 2984323 2950225 2984348 2832415 2868277 2962343 3003817 3006315 2889901 3045670 3097695 3038344 2822860 3090336 2933267 3028519 2933159 3060548 2889805 2996...
result:
ok 191 lines
Test #6:
score: 4
Accepted
time: 1395ms
memory: 106480kb
input:
jmoifvagmonbuxznpdxtcgfycygerridhihasxonifvcorwbbadpyjvgyveicsfcrcjjecfktxuumtvfjxocbgeoeefrzlykfqeaarrlhkjovevehnezlcjikjjjfuxfoclvirrbctlicoitgwnphfzgzepxyejlsijruxxdvzahqjpaqhgcumtjnwkbskyengdgzbtxteacjoyvndwiturrdtlcyccbckhmlfyqohfcjvzhtcuqxxpexkvlckohvidmwkghiijakocqyjskcfoxxzffzgtylbiyythobvdx...
output:
124863337763
result:
ok single line: '124863337763'
Test #7:
score: 4
Accepted
time: 1355ms
memory: 106432kb
input:
jxfsgnlqidcnbfleihizzderbbyzminbutjjknmojrymnghyunksfsqtfijisxyxfaygactkupfrpnugcrvhseqxpdiyrzrzanctqtygvhpumvlxwmvduwbysmkzpckcgbjxmlgyfhdpdjqehloisnpilhpshexuljbjlnkcbkjcnpudmycjigdirokeyvcvkmkrsyjbftizewmcfyuxghxqmwmqdvhswdnsjvybvefdnupdkrqcvnlnfbybifdovvapsdjoppvzvkmxjzevqifzclignjponvndafghncmm...
output:
124869633540
result:
ok single line: '124869633540'
Test #8:
score: 4
Accepted
time: 126ms
memory: 32624kb
input:
lbmckmhibhhmgglmcbfkclhacldibgaadakchjabmimjlidhhldljfmkegaieahdbjccdhjefbfebedjiefeflbejkihgjbfgeflchegbamekdlaaacfgabdabmfgjgfmjailbdgbhfbmaaclcidkkgldmejjhcmahhmgkimgfclcgkkalgdcmaiieakmkmflhbdmmibkbkfcjieekbccheahgegkfchfchemgkfghmiabllamichbbdbhjlcfafkijgihgmekhkdebkfbkdagdbhcgjmkamlfhmkjgmfafl...
output:
199927488 12 4 10 8 12 7 10 11 8 7 12 9 12 11 6 10 10 6 11 5 11 8 9 8 11 9 5 11 11 10 2 4 10 13 9 11 8 8 10 10 11 10 12 11 10 7 10 9 6 10 9 12 10 9 11 12 11 11 11 10 7 8 12 10 12 9 7 5 10 12 8 8 8 10 7 12 7 11 12 9 10 7 10 12 10 13 9 8 9 8 8 9 9 11 11 8 6 4 0 6 4 8 10 9 13 9 12 13 7 7 10 11 8 7 10 8...
result:
ok 4411 lines
Test #9:
score: 4
Accepted
time: 150ms
memory: 33056kb
input:
uwhchfeaycdqlasqdrbylqxaridtgcmyrmkdfdahthdwvkojhqxacqomockaqqoanitzhkmcgcdvniteghvxiyjrqziqjiuljewrdwaabtqwfrfalgloikpxcllbngrzphwcsdmiflqvznvuvxivxsvpqfgkefowexaoplhqfenuwawvwhtmocrmqifqdbyudhmkgiucudnxbjaucppbzobxpmqufhvexdvyjiefmxlfpczvqiuqucvnryxicvusurdiaavudphnnmfqgtichpwfvpaglqqzlmbwwwjohdgx...
output:
199945526 2 3 2 3 3 1 3 3 3 2 3 3 3 3 3 3 3 3 3 2 3 3 3 3 3 2 3 2 2 3 2 3 2 2 2 3 2 3 2 2 2 3 2 1 3 3 3 1 3 3 2 3 2 3 2 3 2 2 3 2 3 3 2 1 3 2 3 3 2 3 3 1 3 3 3 3 2 2 3 2 3 0 3 2 3 2 3 3 3 3 3 2 3 0 3 3 3 2 3 2 3 3 3 3 2 3 3 3 2 3 3 3 3 3 3 3 2 3 2 1 3 3 3 2 2 3 2 3 3 3 3 3 3 3 2 3 2 3 2 3 2 2 2 4 2 ...
result:
ok 5706 lines
Test #10:
score: 4
Accepted
time: 291ms
memory: 64456kb
input:
kimblfhedhamehaaacifgbgflkkldkalaakkhlaiejmeccmcffablhblmggjdmkbhljkkhgfjklieakmkjaamgikmccfkfghljahlkijgjdaechcbifailjcglkkedlgicjebfhiebkfciljkeacceejmkaalhcajfhfmkcecdklbdajdlfikkhiekdbebjbbdfgjcjhfbkclbhbbhjfdffegebkjfkcdilemclilbhflaihgihcgkldcbaakhdjhbekibbigibjdmjbbfalhccmddmckgljfmhgjbalbdjg...
output:
799877758 11 1 11 13 12 10 10 8 10 7 13 8 9 12 11 11 1 14 10 7 2 8 8 8 11 4 9 10 9 11 10 4 8 6 2 11 12 10 7 8 10 12 10 7 0 10 11 4 7 6 8 1 4 5 10 10 6 9 11 11 9 4 11 11 11 12 12 8 11 12 12 8 11 12 8 9 6 12 7 8 8 9 8 9 11 10 7 13 9 11 12 10 11 11 11 9 8 9 2 13 8 12 9 8 8 3 10 12 12 11 10 8 11 9 10 11...
result:
ok 8521 lines
Test #11:
score: 4
Accepted
time: 349ms
memory: 65152kb
input:
hpfxngoxndlosbzylksgzehfhkodfvqwwbtwlreetgeusomoymlaukhqqeqhfawfvuqjbwyrtwwjzmrtrnhvibtibiachlutcqbsydmynzxzdrkydyyekbmezwhvvfngnlklzdjpgbpjatahwuvoluqjoefktvlwdtynwprfekbpvgqtwmwneaofpktxfudwpibhlqmiybqbvsfsywlbktjcqvzwxtddkmliwukvkqsdssszsbmtnpynoohpgclvufblcdvqwrpjtuayinwqppbuidyynbpaolisqodbrqqt...
output:
799884036 3 2 2 1 3 2 3 2 1 3 3 2 2 2 3 2 3 1 3 2 2 2 3 2 2 1 3 3 3 2 3 0 3 1 2 3 2 2 2 1 3 2 0 3 3 2 2 3 2 1 3 3 1 2 3 2 2 2 2 2 2 3 3 3 3 2 2 2 2 2 3 3 3 1 2 2 3 2 3 1 3 2 3 3 2 2 2 2 2 2 0 2 2 2 3 2 2 2 2 3 2 3 3 2 3 3 3 2 2 2 2 1 3 3 3 3 3 2 2 2 3 2 2 3 2 3 2 2 2 3 3 3 2 3 3 2 2 1 3 3 2 3 0 3 3 ...
result:
ok 11413 lines
Test #12:
score: 4
Accepted
time: 443ms
memory: 97988kb
input:
cdfmjmimggmlmabjlakafafdgkbdkaclfemhajdamjkliajhmajfidkghmejelfkjedddkcgbdidelhghbabckiihdjhdjhakmeldjbikdagdfhalfikeggefcmehhgccilmaehhkagafafaegjgakjekcbhbbjgfhimhmlblgmeddfffdhfgmiacadfhglhjaekdaeacdbfmlcjfffbkcbffljjkbhigejmmmhkaljcljibgekjfhefmbjilcahefblblgeledddgemdgihfecclicgbkmilmifflllhmmc...
output:
1799824843 7 13 11 8 5 12 12 7 12 8 7 10 10 7 7 5 10 0 1 8 5 4 8 1 7 11 7 8 9 11 11 9 8 5 10 10 12 11 10 12 10 7 0 12 11 12 10 10 6 11 5 12 10 10 7 5 10 10 11 10 12 7 7 8 11 8 13 10 10 11 6 10 11 13 13 7 13 8 12 4 11 6 7 11 10 13 5 7 8 2 6 8 6 8 14 11 5 3 8 12 8 9 12 7 9 11 9 9 11 9 8 9 7 4 7 11 11 ...
result:
ok 12631 lines
Test #13:
score: 4
Accepted
time: 557ms
memory: 98864kb
input:
ophmmxojwyabxitozutwdxkmleazyhkqzfhqtdjggpjclzkhcerzmpdkprqjkmnpvccyajlwcohqgzqticihosjhxmwymdzoqnawgmtegjqyrngnqcheacmkgbrwsfldsmlnqjkocblhrnwguaexvnfvrceexfqpzumxsuuhfhdhujqoqdxrkknnhiygrabiqspaqdqreiswbcqdjnyqijdzolltfiiismxltjukwuixllitlyjglwwqekrlbkbwutvnifampunpzmpmwyclwxwgrowvnbqqmkreqhrwgvey...
output:
1799817649 2 1 0 1 2 3 2 2 3 1 1 2 3 1 1 3 2 2 3 3 3 1 2 3 2 2 3 1 1 3 2 1 2 3 2 2 3 2 3 2 2 2 1 3 3 1 2 3 3 2 1 2 2 2 2 3 2 1 1 2 3 2 0 1 2 2 2 2 2 3 2 3 1 3 3 3 3 2 3 2 2 2 2 2 3 2 3 2 3 2 2 2 2 2 3 3 1 2 2 3 2 1 3 3 2 3 2 2 1 1 3 3 2 2 2 2 1 2 3 2 1 2 1 3 2 2 2 3 2 2 3 2 1 2 2 3 2 1 3 3 3 2 1 1 3...
result:
ok 17118 lines
Test #14:
score: 4
Accepted
time: 629ms
memory: 130288kb
input:
lbmafbiicbjcmhbbmbabkgmbafmmhjldiifkmhejgmdcbijilcaidajjjebklkikjdjefalfkemjmbifalacllkcehbgkdkabiiefmhjcimlmckcbebidhddclhhlabdalegkfhcdbejbdmbhbfgelmkfdbkbdaclahbfggijmbgigilebmbijddfkjbafdjghijiibljgclgbciijhmjdhcjelmhiecaiahkhledfbekdlmcdceecckhkebclhilgbikmfgjmjgflmffkdjjkbcaemagedmcjajgikgefga...
output:
3199770934 9 9 11 8 9 10 10 13 9 10 8 11 11 10 11 8 10 10 11 8 10 4 4 11 11 9 11 8 11 11 4 12 7 12 11 11 12 8 11 8 6 1 10 10 7 6 11 10 6 11 10 12 8 7 4 11 5 7 11 10 4 10 3 6 12 13 10 8 9 8 12 5 12 10 4 10 10 8 10 8 10 6 14 10 0 10 10 10 12 5 8 1 10 9 11 12 9 5 10 6 9 8 6 9 12 10 12 10 8 11 11 12 5 1...
result:
ok 16741 lines
Test #15:
score: 4
Accepted
time: 763ms
memory: 132856kb
input:
dsppfaesydhozppylwmfzcvsllhggovukeeepvtiodzzdcmlauhymvxijszrobdecuhxjsivtwjtmvphssgvyifmixgddeuofabohugyfnnqbtsjrynkvtvcqkrhwovooktcfwmxagrxgekxdgldaqffybwmdkeykyocudevwdojhcbhipfwclhzmtoyznnbdadomffoaxihkuojezabjppeyzkgwjgcpvuuxvojahfrdeybcklvqwvfftcwkxqfhbddbxfduvitycznkuzgukryyhktzoslzqiiggugpwvr...
output:
3199747543 2 1 2 1 3 3 0 2 1 2 1 2 0 2 2 1 2 2 0 1 0 2 1 2 1 2 3 2 2 2 1 2 2 2 1 3 1 2 1 2 2 2 2 2 1 1 1 3 1 1 3 1 2 3 2 1 2 2 2 1 2 1 1 1 2 2 2 2 1 2 2 2 2 2 3 2 2 2 2 3 2 1 1 2 2 3 3 2 2 1 2 1 3 2 1 2 3 1 3 1 3 2 2 3 2 1 2 2 3 2 2 2 2 3 3 1 1 3 0 1 1 2 1 1 1 2 1 2 2 0 1 1 3 2 2 3 2 2 2 3 3 1 2 2 2...
result:
ok 22825 lines
Test #16:
score: 4
Accepted
time: 810ms
memory: 160760kb
input:
lgcjmilcjkfljihhadhcgcljecggdihjjihgdmbgggmdmfligahflfffcbcmfjlfmamfmcllfgffcciihhcfdihlbgbklmkjacjkhjajhaijifebillabigdeichhklajlechjhbeaiahhidemiaaaehkkaelabbdchficchchdcljbbbdmjfldkmjledjkkhldjjagdimadbdkkmcblkgfbmghieiiaamicjlemabecdemjbbhjjadfhlbaaglbfbbbilljmfjmadcmckfegfalkacbkjkafcgaklgabjkm...
output:
4999715467 11 11 11 8 9 0 10 0 10 12 10 11 11 8 11 11 12 9 9 10 5 11 9 9 8 12 12 11 9 10 12 10 8 12 7 7 11 4 11 0 8 10 6 12 5 8 8 12 3 4 7 11 10 8 8 10 10 5 11 10 9 10 12 8 1 12 9 11 11 13 10 6 8 4 9 10 11 11 12 7 4 10 12 4 0 10 8 6 12 11 10 8 10 11 10 9 11 8 5 13 11 10 8 11 10 12 11 12 9 7 10 8 6 1...
result:
ok 20852 lines
Test #17:
score: 4
Accepted
time: 1024ms
memory: 164276kb
input:
crouxgkvirnjrytirundlljrgfwtazivrwzxxwditbfcooymmlaqvtisxnwbhhdusjrqtvebvgmuaietaotldzzsrqtplqfucfyjpfrohwraeeufvpetorvakablkyvvnwetsrqjlxhmjwgqekapdrvcymvxdzojvbsvcjqrjsdnimathoxcldskndebsfnoqpwxjiicaqdaxhmfnozvwhezimqwnwaoktflkfpdqyhuwtdtgqanymowveuxayebwbjeliulrglhaxwgmgvgiqwqvrkwetmdvkshxwpobakc...
output:
4999675655 3 1 1 2 1 2 1 2 3 2 2 1 2 2 1 3 1 2 1 1 1 2 2 2 2 1 3 2 2 2 0 1 1 1 2 1 3 2 3 2 2 3 1 1 2 3 1 2 2 2 1 2 1 2 1 2 2 2 2 3 2 1 2 1 1 1 1 2 2 3 1 1 2 1 2 2 1 2 2 2 1 3 1 1 1 1 2 1 1 2 2 1 2 2 1 1 2 2 2 2 2 2 1 2 0 2 2 0 2 2 1 1 2 2 3 2 3 2 2 1 2 1 3 2 1 1 1 2 3 2 2 2 3 1 1 2 2 2 2 2 1 1 2 3 1...
result:
ok 28531 lines
Test #18:
score: 4
Accepted
time: 1396ms
memory: 126384kb
input:
hlheiljjdhhlgihkakdbmjjkjbihblhabaaafedcjickgbmimhldcfdgaeaemhheclgeglffkkiklgalagllffkjkkjbkllkgkkbblficjmklljcfallcicmfdflgebfjeacjejeedmimfdeiadbegfkckiaffagigmckdkihdikgilgehmaglhiddljghmfhgikfkgmfkadekgfalhlemfkdeggcdfkhmjdcdabmeebblbgeflbhkcjgdgadlbfmdebkhhhfajjiflejijamgjekelmjhcmakcglmhafdai...
output:
4999734984 8 12 5 11 9 12 13 9 11 10 5 13 8 13 9 8 11 5 6 9 13 8 9 8 8 3 12 5 13 11 13 9 13 14 11 11 11 5 12 12 8 5 9 14 10 12 14 8 9 11 5 12 5 13 8 12 13 13 11 10 11 12 10 12 13 1 9 14 8 9 5 12 5 0 14 14 12 8 8 11 12 11 11 12 7 9 10 7 10 14 13 5 9 8 7 11 12 9 11 14 11 9 8 12 9 11 1 11 7 12 9 11 11 ...
result:
ok 20852 lines
Test #19:
score: 4
Accepted
time: 1461ms
memory: 140576kb
input:
hcickbjbggigfjddcmijgfbafdebdkcldbibaaegkhmdeibkjdjigbmfelkbdablaccmeblcgikdglmllmdagaaaikfjhdcldhmhmiiiccbhehdhbkjdgkkjhfkflckidfibicfihaagficicjkbiiejddegmcahacchfgmkmmlehbelhlmbkamelfjhkmgfljbaffjjfmfhmhafjhhhdlgfggbilkkcghfaalllcdeffbbjichaiedagaalehkcaglcacgldciahdgehibefmghedciddglfbbmdigdbjij...
output:
4999739719 13 5 11 8 10 13 9 9 8 12 9 11 7 5 13 11 5 6 6 10 12 3 10 1 13 6 12 11 11 6 0 12 8 8 3 10 12 14 13 11 10 12 13 11 9 13 8 5 12 5 12 12 8 9 10 0 14 11 11 9 5 14 10 9 10 4 6 14 8 10 9 9 8 7 12 8 9 8 11 8 11 13 13 5 6 11 14 12 5 5 15 11 0 11 6 11 11 12 11 12 13 8 1 9 9 13 9 9 0 12 13 12 13 13 ...
result:
ok 20852 lines
Test #20:
score: 4
Accepted
time: 1504ms
memory: 150812kb
input:
cjhkkbhdfmbagemlcmcdclghhcebjlaikgbdlbkedeckmimkeffkjfljmghahfgeihehlfhicjckhjmidafdkhfgehjdgdclckchjddkglaijcfcmigkgmhkmggelagbkbkikaghbadbfeifkemehhcljcfjeljejeehbklflekflaedfeclhidaahikdfaeljbhbaffkdblmecidjglkddkmecifgccmjkjhjecgaklmemfcfemlfmbkljjbakdhchehfhaelhgkicdbhgddcfjeikimklccbdmccjiilhf...
output:
4999718204 13 12 13 11 15 9 12 11 10 9 1 7 12 12 9 13 11 13 5 11 5 12 12 10 11 14 8 11 12 11 13 11 12 11 11 11 9 14 13 11 12 13 11 12 12 11 14 12 13 5 10 11 7 8 13 13 14 14 0 5 11 9 9 5 14 12 9 1 5 0 8 13 11 13 13 8 5 8 1 10 12 9 7 5 11 13 12 13 11 12 5 0 13 12 4 14 11 11 13 11 11 6 11 10 8 13 11 14...
result:
ok 20852 lines
Test #21:
score: 4
Accepted
time: 1470ms
memory: 161064kb
input:
acdalbjachemiccjijekjladlmgcdibegjemfggmcajmkdfaicklclhhjjiifdjkglcdieahidalajicmabkejeggmjdacmljghlicficlaidacjegkhgdmalfbgakblgfbglebhjmkccfgkdkcbgddfgcmkkddlmlikljhmcgfddgkfhddkiekkaefbedjhglclfgebfddlbkkadhlahccmbgjagkkchemmhgbcjkcjdgbmbfhmhgckffedkkllkemkegjhbkijhkjmckkgcccebelfdikbfeigdflebkck...
output:
4999757046 9 13 9 8 11 12 12 6 14 11 5 12 10 10 11 12 11 11 12 8 13 7 5 5 11 9 12 13 13 9 10 11 10 10 4 11 11 11 14 13 11 9 12 8 8 14 10 9 5 10 14 13 1 8 11 5 9 11 10 3 12 10 12 9 13 0 11 11 8 11 8 13 13 9 4 10 14 9 11 10 10 11 10 0 10 2 12 4 9 11 12 12 11 13 12 14 5 7 10 8 12 8 13 14 10 14 13 13 11...
result:
ok 20852 lines
Test #22:
score: 4
Accepted
time: 1512ms
memory: 160604kb
input:
mddlmgjdadiajebkkjdcfcaemmacbeefbiheblhihlahcilkgcgcgbgbkdddbiedlejkaibalfggglkghmddiiikfabgmggecdmifaegcmkfcmlcfhlecifdiejflclehcbajacmakchcekkiddljfdlejgefbgkgicbdjamafjfgcdmhaejffmdaedaidabihdckhjdkfdclaafcibjfidakllflmejfaeeilaehkicmifjcdiagiihchgefafeaabbihmkddcaembjgjdeljjldagjgghammkfagahdjgb...
output:
4999718831 10 11 0 15 11 14 12 11 14 5 13 12 9 9 6 13 13 13 12 9 14 13 14 10 12 9 5 11 9 13 11 11 12 6 11 12 14 9 0 8 12 14 14 9 12 9 12 5 12 14 11 12 11 12 11 9 14 10 11 12 11 13 11 12 8 5 13 12 10 12 5 12 8 7 15 9 12 9 14 0 13 12 1 5 9 15 9 12 11 11 11 9 13 9 11 11 11 9 8 8 8 12 5 0 7 13 11 9 9 11...
result:
ok 20852 lines
Test #23:
score: 4
Accepted
time: 1511ms
memory: 160548kb
input:
llfdgmcekbmbimkccddilecgmlimhkklijdgcfjcdkblbglbaaegedfeihjfgigigfbajgakjmmafechejfihfmdkidmlfdcejkkielgcakckilmlgiklmlalklfdcgkhlmlhkjbkhmdkbhmbfidfmccicgcbejmklcmelcigfjjiaifebbdimekgaglhejaadaglhahfkmkljkfakaifihfihikecehmafbgicelabajgghlmffhgfciclmhmbfhbkbbffmikkeadafebkjkdcidbgadmiaelbhkegimmbf...
output:
4999718003 11 10 12 12 11 10 8 11 12 12 13 9 0 12 14 9 4 12 14 11 11 14 11 9 11 11 14 9 11 12 14 11 11 9 12 15 12 8 14 13 13 9 12 7 5 13 13 13 10 13 10 11 14 9 12 13 9 12 8 11 9 11 15 11 9 11 8 11 12 2 11 13 1 11 11 11 8 7 12 13 9 9 13 9 14 5 12 12 12 6 5 6 9 12 13 12 11 13 14 12 13 14 9 12 0 11 12 ...
result:
ok 20852 lines
Test #24:
score: 4
Accepted
time: 1541ms
memory: 161276kb
input:
dhblhcfekgfmbjkhalldhjckleeffihfallgiafelkkehflcmbikdiijmajkeaghlddammajjdffieiidbgedfekciajfflgbgegmfmaljamaliihmjladahiglmkafmiiflcbhbhceimhmhheeidaejgaecmahcmchclijjdjajmkjgjdgkhmljmjlgadflbdkdkgbggdddicllcfkdmajigmglkfcllijleblcaabkajjghhdgkdbllmjhahjecccfhcgmfemljbkamhgbehjkfffaickeagejjhkgmimb...
output:
4999724403 11 11 9 0 8 7 10 12 11 11 12 11 11 12 12 11 5 5 11 11 14 9 9 10 12 9 11 10 9 11 11 12 9 11 13 6 13 12 11 10 13 9 9 12 1 9 14 12 1 13 9 9 9 13 11 13 14 12 11 10 11 8 0 12 7 13 14 11 13 9 10 10 10 9 14 5 8 9 3 5 5 11 5 13 12 9 5 13 11 12 8 11 14 9 14 12 9 9 11 0 11 8 11 12 12 14 6 11 11 13 ...
result:
ok 20852 lines
Test #25:
score: 4
Accepted
time: 1534ms
memory: 161080kb
input:
iiafeelfecahcjmkadhjkdmmelhmaiafglhiabmlafgmackbbkgfdhdhlageljhmlmehhjgbgkjmbaiffjhcfceiidghmggkhlhkcjdjiehfdcjdlkblgbkcdahgiccjiimggkdlhlkgddbiigbjhbdblbggaealbkldjbfdecmcijdfajlgccfbldbkjmbcmkklfmjfblbhieibecfgjcbchkegbdamflhfjfdgjglkakkgheakegkhlllmhljekmidlhfcmjlgmmajmgjmmlfkhhbklgliejcikjehdijd...
output:
4999717091 12 13 10 8 12 13 10 5 11 9 8 10 13 11 13 13 5 12 6 8 13 11 5 5 11 13 10 9 11 13 10 9 9 12 2 11 12 11 10 11 13 13 13 10 13 11 8 11 11 9 10 5 11 10 8 0 7 11 3 11 11 12 11 7 10 9 12 11 12 11 1 8 5 10 11 11 8 11 11 10 8 13 9 12 5 11 12 10 10 0 13 10 12 15 11 9 10 4 0 11 10 13 5 9 11 12 7 13 1...
result:
ok 20852 lines
Extra Test:
score: 0
Extra Test Passed