QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#212733 | #6635. Strange Keyboard | zlt | WA | 72ms | 110516kb | C++14 | 2.0kb | 2023-10-13 20:07:22 | 2023-10-13 20:07:22 |
Judging History
answer
#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))
using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;
const int maxn = 1000100;
ll n, m, K, len[maxn], ch[maxn][26], ntot, f[maxn], g[maxn], lsh[maxn], tot, h[maxn];
char t[maxn];
string s[maxn];
void solve() {
for (int i = 0; i <= ntot; ++i) {
f[i] = 9e18;
for (int j = 0; j < 26; ++j) {
ch[i][j] = 0;
}
}
ntot = tot = m = 0;
scanf("%lld%lld", &n, &K);
for (int i = 1; i <= n; ++i) {
cin >> s[i];
len[i] = (ll)s[i].size();
s[i] = ' ' + s[i];
lsh[++tot] = len[i];
}
sort(lsh + 1, lsh + tot + 1);
tot = unique(lsh + 1, lsh + tot + 1) - lsh - 1;
for (int i = 0; i <= m; ++i) {
g[i] = -1;
}
g[0] = 0;
queue<int> q;
q.push(0);
while (q.size()) {
int u = q.front();
q.pop();
if (u > K) {
if (g[u - K] == -1) {
g[u - K] = g[u] + 1;
q.push(u - K);
}
}
for (int i = 1; i <= tot; ++i) {
if (u + lsh[i] <= m && g[u + lsh[i]] == -1) {
g[u + lsh[i]] = g[u] + 1;
q.push(u + lsh[i]);
}
}
}
for (int i = 1; i <= n; ++i) {
int p = 0;
for (int j = 1; j <= len[i]; ++j) {
if (!ch[p][s[i][j] - 'a']) {
ch[p][s[i][j] - 'a'] = ++ntot;
}
p = ch[p][s[i][j] - 'a'];
f[p] = min(f[p], (len[i] - j) / K + ((len[i] - j) % K ? g[K - (len[i] - j) % K] + 1 : 0) + 1);
}
}
scanf("%s", t + 1);
int le = strlen(t + 1);
h[0] = 0;
for (int i = 1; i <= le; ++i) {
h[i] = 1e18;
}
for (int i = 0; i < le; ++i) {
int p = 0;
for (int j = i + 1; j <= le; ++j) {
if (!ch[p][t[j] - 'a']) {
break;
}
p = ch[p][t[j] - 'a'];
h[j] = min(h[j], h[i] + f[p]);
}
}
printf("%lld\n", h[le] > 1e17 ? -1LL : h[le]);
}
int main() {
mems(f, 0x3f);
int T = 1;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 4ms
memory: 53220kb
input:
2 2 3 defgh abc abcde 1 1 a b
output:
3 -1
result:
ok 2 number(s): "3 -1"
Test #2:
score: 0
Accepted
time: 22ms
memory: 53516kb
input:
1 1413 4867 yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn yumnkkghwtqnhpmmsbfwypcwudihegsvt...
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 19ms
memory: 51104kb
input:
10 446 4905 afigcjhcgagabbiccehjcjajigghgbjjadccicghggijjdfeciaccgheedjdhgfjdfdbgidbbdjaiehhceeehchhabhaideggjbjajgfgicfdggahhbjgdebccbgbiedhehaebdccdfdffaacjcfbgjeegbahhbgcdjigijajheidchbddicehhhjbeiaajgedhdcjiefdgdbjjfaegheeidieheecaicciaajbabiidcecefgiicccdidegeica afigcjhcgagabbiccehjcjajigghgbj...
output:
3 2 2 11 6 5 1 1 1 1
result:
ok 10 numbers
Test #4:
score: 0
Accepted
time: 18ms
memory: 50908kb
input:
100 140 4879 baabaababbababbaabababaaababbbabbbbbbabbababbbabbbbabbbbbbaabbbbbbbbabaabbbaabaabbbaabbabaabaabbbabbbababbbaabbabaaaaabbaaabbbabb baa baabaababbababbaabababaaababbbabbbbbbabbab baabaababbababbaabababaaabab baabaababbababbaabababaaababbbabbb baabaababbababbaabababaaababbbabbbbbbabbababbb...
output:
1 1 1 1 3 1 1 1 1 1 1 3 2 1 1 1 2 1 1 2 1 1 1 1 1 1 1 1 1 4 3 2 1 2 1 1 1 1 1 2 1 1 1 3 1 1 1 2 1 1 1 2 3 1 1 1 2 1 1 1 1 1 1 1 1 3 2 3 1 3 1 1 2 1 2 3 2 1 1 1 3 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 2 1 4 1
result:
ok 100 numbers
Test #5:
score: -100
Wrong Answer
time: 72ms
memory: 110516kb
input:
1 7 4864 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
7
result:
wrong answer 1st numbers differ - expected: '205', found: '7'