QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#212126#6635. Strange Keyboardsinsop90AC ✓82ms280344kbC++142.3kb2023-10-13 09:28:582023-10-13 09:28:58

Judging History

你现在查看的是最新测评结果

  • [2023-10-13 09:28:58]
  • 评测
  • 测评结果:AC
  • 用时:82ms
  • 内存:280344kb
  • [2023-10-13 09:28:58]
  • 提交

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();
}

详细

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