QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212104#6635. Strange Keyboardsinsop90WA 52ms56264kbC++142.2kb2023-10-13 09:04:192023-10-13 09:04:19

Judging History

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

  • [2023-10-13 09:04:19]
  • 评测
  • 测评结果:WA
  • 用时:52ms
  • 内存:56264kb
  • [2023-10-13 09:04:19]
  • 提交

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] > dis[x] + 1) {
				dis[x - K] = dis[x] + 1; 
				Q.push(x - K);
			}
		}
		else {
			for(int i = 1;i <= tot;i++) {
				if(dis[x + t[i]] > dis[x] + 1) {
					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 = 1;i <= cnt;i++) for(int j = 0;j <= 25;j++) tr[i].son[j] = 0;
	vec.clear(), tot = 0, cnt = 0;
}
int 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: 20036kb

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: 17ms
memory: 23728kb

input:

1
1413 4867
yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn
yumnkkghwtqnhpmmsbfwypcwudihegsvt...

output:

10

result:

ok 1 number(s): "10"

Test #3:

score: 0
Accepted
time: 19ms
memory: 20220kb

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: 20324kb

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: 42ms
memory: 56264kb

input:

1
7 4864
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

-1

result:

wrong answer 1st numbers differ - expected: '205', found: '-1'