QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#113659 | #6635. Strange Keyboard | He_Ren | AC ✓ | 118ms | 48888kb | C++14 | 2.4kb | 2023-06-19 03:11:15 | 2023-06-19 03:11:19 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAXN = 1e6 + 5;
const int MAXM = 5e3 + 5;
const ll linf = 0x3f3f3f3f3f3f3f3f;
int pcnt = 0;
int son[MAXN][26];
ll val[MAXN];
int new_Node(void)
{
int u = ++pcnt;
memset(son[u], 0, sizeof(son[u]));
val[u] = linf;
return u;
}
char s[MAXN];
int sl[MAXN], sr[MAXN];
char a[MAXM];
void solve(void)
{
int n,d;
scanf("%d%d",&n,&d);
for(int i=1,j=0; i<=n; ++i)
{
scanf("%s",s+j+1);
sl[i] = j + 1;
sr[i] = j + strlen(s+j+1);
j = sr[i];
}
scanf("%s",a+1);
int m = strlen(a+1);
static ll f[MAXN];
fill(f, f+d+1, linf);
for(int i=1; i<=n; ++i)
{
int j = (sr[i] - sl[i] + 1) % d;
f[j] = min(f[j], ll(sr[i] - sl[i] + 1) + d);
}
for(int i=0; i<d; ++i)
{
if(f[i] == linf) continue;
if(i == 0) continue;
for(int j=2; j<=10; ++j)
{
int t = i * j % d;
if(f[t] >= f[i] * j) f[t] = linf;
}
for(int j=2; i*j<d; ++j)
{
int t = i * j;
if(f[t] >= f[i] * j) f[t] = linf;
}
}
vector<int> has;
for(int i=1; i<d; ++i)
if(f[i] != linf)
has.emplace_back(i);
static ll dis[MAXN];
fill(dis, dis+d+1, linf);
dis[0] = 0;
static bool vis[MAXN];
fill(vis, vis+d+1, 0);
priority_queue< pair<ll,int> > q;
q.emplace(0, 0);
while(q.size())
{
int u = q.top().second; q.pop();
if(vis[u]) continue;
vis[u] = 1;
for(int i: has)
{
int v = u + i;
if(v >= d) v -= d;
if(dis[v] > dis[u] + f[i])
{
dis[v] = dis[u] + f[i];
q.emplace(-dis[v], v);
}
}
}
pcnt = 0;
new_Node();
for(int k=1; k<=n; ++k)
{
int u = 1;
for(int i=sl[k]; i<=sr[k]; ++i)
{
int c = s[i] - 'a';
int &v = son[u][c];
if(!v) v = new_Node();
u = v;
int rem = sr[k] - i;
ll cur = rem + d;
int t = d - rem % d;
if(t == d) t = 0;
cur += dis[t];
if(cur < linf)
val[u] = min(val[u], cur / d);
if(i - sl[k] + 1 > m) break;
}
}
static ll dp[MAXM];
fill(dp, dp+m+1, linf);
dp[0] = 0;
for(int i=0; i<m; ++i)
{
int u = 1;
for(int j=i+1; j<=m; ++j)
{
u = son[u][a[j] - 'a'];
if(u == 0) break;
dp[j] = min(dp[j], dp[i] + val[u]);
}
}
if(dp[m] == linf)
printf("-1\n");
else
printf("%lld\n",dp[m]);
}
int main(void)
{
int T;
scanf("%d",&T);
while(T--) solve();
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 1ms
memory: 13968kb
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: 14ms
memory: 18184kb
input:
1 1413 4867 yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn yumnkkghwtqnhpmmsbfwypcwudihegsvt...
output:
10
result:
ok 1 number(s): "10"
Test #3:
score: 0
Accepted
time: 34ms
memory: 18084kb
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: 118ms
memory: 18100kb
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: 34ms
memory: 18100kb
input:
1 7 4864 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
205
result:
ok 1 number(s): "205"
Test #6:
score: 0
Accepted
time: 15ms
memory: 28468kb
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: 40ms
memory: 18228kb
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: 2ms
memory: 15972kb
input:
1 1 5000 abaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...
output:
5023990000
result:
ok 1 number(s): "5023990000"
Test #9:
score: 0
Accepted
time: 16ms
memory: 42948kb
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: 23ms
memory: 48888kb
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