QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#212126 | #6635. Strange Keyboard | sinsop90 | AC ✓ | 82ms | 280344kb | C++14 | 2.3kb | 2023-10-13 09:28:58 | 2023-10-13 09:28:58 |
Judging History
answer
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 2e6 + 5, maxK = 10005, INF = 1e18 + 5;
int dis[maxn], n, K, TT, g[maxn], f[maxn], dp[maxn], tot, cnt, len[maxn], t[maxn], st[maxn], lenT;
vector<int> vec;
queue<int> Q;
char S[maxn], T[maxn];
struct TRIE {
int son[30];
}tr[maxn];
void dij() {
for(int i = 1;i <= vec.size() + K - 1;i++) dis[i] = INF;
Q.push(0);
while(!Q.empty()) {
int x = Q.front();
Q.pop();
if(x >= K) {
if(dis[x - K] == INF) {
dis[x - K] = dis[x] + 1;
Q.push(x - K);
}
}
else {
for(int i = 1;i <= tot;i++) {
if(dis[x + t[i]] == INF) {
dis[x + t[i]] = dis[x] + 1;
Q.push(x + t[i]);
}
}
}
}
// for(int i = 0;i < K;i++) cout << dis[i] << " ";
// cout << '\n';
for(int i = 1;i < K;i++) g[K - i] = (dis[i] == INF) ? INF : dis[i] + 1;
}
void insert(int id) {
int u = 0;
for(int i = 1;i <= len[id];i++) {
int x = vec[st[id] + i - 1];
if(!tr[u].son[x]) {
tr[u].son[x] = ++ cnt;
f[cnt] = INF;
}
u = tr[u].son[x];
f[u] = min(f[u], (len[id] - i) / K + g[(len[id] - i) % K] + 1);
// cout << u << " " << f[u] << " " << (len[id] - i) / K << " " << g[(len[id] - i) % K] << endl;
}
}
void solve() {
cin >> n >> K;
vec.push_back(114514);
for(int i = 1;i <= n;i++) {
cin >> S + 1;
len[i] = strlen(S + 1);
st[i] = vec.size();
t[i] = len[i];
for(int j = 1;j <= len[i];j++) vec.push_back(S[j] - 'a');
}
cin >> T + 1;
lenT = strlen(T + 1);
sort(t + 1, t + 1 + n);
tot = unique(t + 1, t + 1 + n) - t - 1;
dij();
for(int i = 1;i <= n;i++) insert(i);
dp[0] = 0;
for(int i = 1;i <= lenT;i++) dp[i] = INF;
for(int i = 0;i < lenT;i++) {
int u = 0;
for(int j = i + 1;j <= lenT;j++) {
// cout << j << " " << u << " " << T[j] - 'a' << endl;
if(!tr[u].son[T[j] - 'a']) break;
u = tr[u].son[T[j] - 'a'];
dp[j] = min(dp[j], dp[i] + f[u]);
// cout << i << " " << j << " " << dp[j] << " " << f[u] << endl;
}
}
cout << ((dp[lenT] == INF) ? -1 : dp[lenT]) << '\n';
for(int i = 0;i <= cnt;i++) for(int j = 0;j <= 25;j++) tr[i].son[j] = 0;
vec.clear(), tot = 0, cnt = 0;
}
signed main() {
// ios::sync_with_stdio(0);
// cin.tie(0), cout.tie(0);
cin >> TT;
while(TT --) solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 22296kb
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: 20ms
memory: 38192kb
input:
1 1413 4867 yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn yumnkkghwtqnhpmmsbfwypcwudihegsvt...
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 31ms
memory: 26728kb
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: 48ms
memory: 24216kb
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: 0
Accepted
time: 82ms
memory: 105084kb
input:
1 7 4864 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
205
result:
ok 1 number(s): "205"
Test #6:
score: 0
Accepted
time: 50ms
memory: 83460kb
input:
10 7 4923 baaabbabbbabbbbbabaabaabababbabbaaaabbaaabbbbabbaaababaaaaabaaabbabbbabbaaaabbaabbbaabbaaababaaababbabaababbaababbabaaabaabbaaabaaaababbabbabaabaabaabaabbbbaabaabbbaababbabbabaaaabbbaabbbaaaabaaaaababbaabaaaaababbbbaaaabbbaababbaabbabaabaaaaababaababaabaaaaabababababbabbbabababaaabaababbaa...
output:
4287 228 3671 549 129 372 475 534 336 288
result:
ok 10 numbers
Test #7:
score: 0
Accepted
time: 41ms
memory: 29760kb
input:
100 7 4807 abbababaababbaabbabbaabaababbaaababaabaaabbaaaabababbbaabbaaabababbaabaabbaaaaabbbbaabbbaaabbbbabaabbbaaaaabbbaabbaaaabbaaababbaaabbbbabaabbababababbbabaaabaaaabbbbabbabbbbbaabaaabaababbabaaabbaabbabbabaaababbbabbabbbaababaabaaaabaaabbbbabbaabaababbbabbbbaaaabbabbbaabbaabbbbb aaaaababaaab...
output:
45 32 11 4 2475 132 50 330 20 6 99 25 126 6 4 14 74 108 208 11 5 67 166 2822 178 1307 548 92 386 493 279 2415 255 262 567 215 46 113 31 651 17 4 8 21 12 100 69 152 15 55 521 146 11 13 181 -1 442 1839 2 5 31 26 122 696 280 77 1 839 11 273 7 178 421 228 6 6 82 116 1 -1 293 519 5 160 15 126 13 31 619 4...
result:
ok 100 numbers
Test #8:
score: 0
Accepted
time: 55ms
memory: 280344kb
input:
1 1 5000 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
5023990000
result:
ok 1 number(s): "5023990000"
Test #9:
score: 0
Accepted
time: 39ms
memory: 100816kb
input:
1 100000 4817 acdcaaccca cdbbbbabba bcbccbcdbd cdabaddaad ddbdbabcac dadadbbcba aabcbbcabc cdcadbbbda dabacdbabd dcbadbdabd cdcbacbada cadbbadbac dbadbccdcd babaddcdca aaaddacccc dabdcdadbb abbbadbdaa bcdbbacdaa bcbcbddadb bddaccbaba baddadaaac adbadbdaaa cacbbbcdbc abccdcacdb abaacddbbc acbbbcbcdc ...
output:
618356
result:
ok 1 number(s): "618356"
Test #10:
score: 0
Accepted
time: 45ms
memory: 92724kb
input:
10 3901 4952 srsofqyvrt tazndzviuq jcomfoxkiw huzfqiecss hhdtqpaohy qcrokphbtf xzkxssibix hokmdpzydu jreaeulsjt vmxdsazajq jawyofqbck cwmzupygdm rgsahqyxqt kckgorfgvi kcawvezmyb mpcyhdifgn xiwtmwttmp mzknfqoifl vbpvvdnqpy anpdgjnbew scekjovqpr lzhfocjvld oswjfhjdby pmdbjddkpv yjbnjcdtmc gmpjgtpksa r...
output:
904 208656 4560 30873 28272 5377 1326 93956 93720 282610
result:
ok 10 numbers