QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#358740 | #6635. Strange Keyboard | ucup-team134 | TL | 843ms | 5052kb | C++17 | 1.8kb | 2024-03-19 23:29:48 | 2024-03-19 23:29:49 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
const int N=1000050;
const int inf=1e9+7;
const int M=5005;
char s[N];
int go[N][26],tsz,root,best[N],ptr[N],len[N],mn[M];
void Add(char*s,int n,int k){
if(!root)root=++tsz;
int now=root;
for(int i=0;i<n;i++){
if(!go[now][s[i]-'a']){
go[now][s[i]-'a']=++tsz;
best[tsz]=inf;
}
now=go[now][s[i]-'a'];
if((n-1-i)%k!=0){
best[now]=min(best[now],(n-1-i)/k+2+mn[k-(n-1-i)%k]);
}else{
best[now]=min(best[now],(n-1-i)/k+1);
}
}
}
int dp[M];
char t[M];
int mnl[M];
int main(){
int q;
scanf("%i",&q);
while(q--){
int n,k;
scanf("%i %i",&n,&k);
for(int i=0;i<k;i++)mnl[i]=inf;
for(int i=1;i<=n;i++){
scanf("%s",s+ptr[i]);
len[i]=strlen(s+ptr[i]);
ptr[i+1]=ptr[i]+len[i];
mnl[len[i]%k]=min(mnl[len[i]%k],len[i]);
}
priority_queue<pair<int,int>> pq;
for(int i=1;i<k;i++)mn[i]=inf;
pq.push({0,0});
vector<int> ids;
for(int i=1;i<k;i++)if(mnl[i]!=0)ids.pb(i);
while(pq.size()){
int x=pq.top().second;
int d=-pq.top().first;
pq.pop();
if(d!=mn[x])continue;
for(int i:ids){
int w=1+mnl[i]/k+(x+i>=k);
if(mn[(x+i)%k]>mn[x]+w){
mn[(x+i)%k]=mn[x]+w;
pq.push({-mn[(x+i)%k],(x+i)%k});
}
}
}
for(int i=1;i<=n;i++){
Add(s+ptr[i],len[i],k);
}
scanf("%s",t+1);
int m=strlen(t+1);
for(int i=1;i<=m;i++)dp[i]=inf;
for(int i=0;i<m;i++){
int now=root;
for(int j=i+1;j<=m;j++){
now=go[now][t[j]-'a'];
if(!now)break;
dp[j]=min(dp[j],dp[i]+best[now]);
}
}
if(dp[m]==inf)printf("-1\n");
else printf("%i\n",dp[m]);
root=0;
for(int i=1;i<=tsz;i++){
for(int j=0;j<26;j++){
go[i][j]=0;
}
}
tsz=0;
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 4088kb
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: 91ms
memory: 5052kb
input:
1 1413 4867 yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn yumnkkghwtqnhpmmsbfwypcwudihegsvt...
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 843ms
memory: 4120kb
input:
10 446 4905 afigcjhcgagabbiccehjcjajigghgbjjadccicghggijjdfeciaccgheedjdhgfjdfdbgidbbdjaiehhceeehchhabhaideggjbjajgfgicfdggahhbjgdebccbgbiedhehaebdccdfdffaacjcfbgjeegbahhbgcdjigijajheidchbddicehhhjbeiaajgedhdcjiefdgdbjjfaegheeidieheecaicciaajbabiidcecefgiicccdidegeica afigcjhcgagabbiccehjcjajigghgbj...
output:
3 2 2 11 6 5 1 1 1 1
result:
ok 10 numbers
Test #4:
score: -100
Time Limit Exceeded
input:
100 140 4879 baabaababbababbaabababaaababbbabbbbbbabbababbbabbbbabbbbbbaabbbbbbbbabaabbbaabaabbbaabbabaabaabbbabbbababbbaabbabaaaaabbaaabbbabb baa baabaababbababbaabababaaababbbabbbbbbabbab baabaababbababbaabababaaabab baabaababbababbaabababaaababbbabbb baabaababbababbaabababaaababbbabbbbbbabbababbb...