QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#212093 | #6635. Strange Keyboard | sinsop90 | WA | 52ms | 58220kb | C++14 | 2.2kb | 2023-10-13 08:51:59 | 2023-10-13 08:51:59 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5, maxK = 10005, INF = 1e9 + 5;
int dis[maxn << 1], 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 <= 2 * K;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 = 0;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++) f[i] = INF;
vec.clear(), tot = 0, cnt = 0;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> TT;
while(TT --) solve();
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 19864kb
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: 13ms
memory: 23716kb
input:
1 1413 4867 yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn yumnkkghwtqnhpmmsbfwypcwudihegsvt...
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 25ms
memory: 20052kb
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: 52ms
memory: 19956kb
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: 46ms
memory: 58220kb
input:
1 7 4864 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
-1
result:
wrong answer 1st numbers differ - expected: '205', found: '-1'