QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212773#6635. Strange KeyboardzltWA 133ms110828kbC++142.4kb2023-10-13 20:28:232023-10-13 20:28:23

Judging History

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

  • [2023-10-13 20:28:23]
  • 评测
  • 测评结果:WA
  • 用时:133ms
  • 内存:110828kb
  • [2023-10-13 20:28:23]
  • 提交

answer

#include <bits/stdc++.h>
#define pb emplace_back
#define fst first
#define scd second
#define mkp make_pair
#define mems(a, x) memset((a), (x), sizeof(a))

using namespace std;
typedef long long ll;
typedef double db;
typedef unsigned long long ull;
typedef long double ldb;
typedef pair<ll, ll> pii;

const int maxn = 1000100;

ll n, m, K, len[maxn], ch[maxn][26], ntot, f[maxn], g[maxn], lsh[maxn], tot, h[maxn];
char t[maxn];
string s[maxn];
bool vis[maxn];

struct node {
	ll u, d;
	node(ll a = 0, ll b = 0) : u(a), d(b) {}
};

inline bool operator < (const node &a, const node &b) {
	return a.d > b.d;
}

void solve() {
	for (int i = 0; i <= ntot; ++i) {
		f[i] = 9e18;
		for (int j = 0; j < 26; ++j) {
			ch[i][j] = 0;
		}
	}
	ntot = tot = m = 0;
	scanf("%lld%lld", &n, &K);
	for (int i = 1; i <= n; ++i) {
		cin >> s[i];
		len[i] = (ll)s[i].size();
		s[i] = ' ' + s[i] + ' ';
		lsh[++tot] = len[i];
	}
	sort(lsh + 1, lsh + tot + 1);
	tot = unique(lsh + 1, lsh + tot + 1) - lsh - 1;
	for (int i = 0; i < K; ++i) {
		g[i] = 1e18;
		vis[i] = 0;
	}
	g[0] = 0;
	priority_queue<node> pq;
	pq.emplace(0, 0);
	while (pq.size()) {
		int u = pq.top().u;
		pq.pop();
		if (vis[u]) {
			continue;
		}
		vis[u] = 1;
		for (int i = 1; i <= tot; ++i) {
			if (u + lsh[i] < K && g[u + lsh[i]] > g[u] + 1) {
				g[u + lsh[i]] = g[u] + 1;
				if (!vis[u + lsh[i]]) {
					pq.emplace(u + lsh[i], g[u + lsh[i]]);
				}
			}
			if (u + lsh[i] - K < K && g[u + lsh[i] - K] > g[u] + 2) {
				g[u + lsh[i] - K] = g[u] + 2;
				if (!vis[u + lsh[i] - K]) {
					pq.emplace(u + lsh[i] - K, g[u + lsh[i] - K]);
				}
			}
		}
	}
	for (int i = 1; i <= n; ++i) {
		int p = 0;
		for (int j = 1; j <= len[i]; ++j) {
			if (!ch[p][s[i][j] - 'a']) {
				ch[p][s[i][j] - 'a'] = ++ntot;
			}
			p = ch[p][s[i][j] - 'a'];
			f[p] = min(f[p], (len[i] - j) / K + ((len[i] - j) % K ? g[K - (len[i] - j) % K] + 1 : 0) + 1);
		}
	}
	scanf("%s", t + 1);
	int le = strlen(t + 1);
	h[0] = 0;
	for (int i = 1; i <= le; ++i) {
		h[i] = 1e18;
	}
	for (int i = 0; i < le; ++i) {
		int p = 0;
		for (int j = i + 1; j <= le; ++j) {
			if (!ch[p][t[j] - 'a']) {
				break;
			}
			p = ch[p][t[j] - 'a'];
			h[j] = min(h[j], h[i] + f[p]);
		}
	}
	printf("%lld\n", h[le] > 1e17 ? -1LL : h[le]);
}

int main() {
	mems(f, 0x3f);
	int T = 1;
	scanf("%d", &T);
	while (T--) {
		solve();
	}
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 4ms
memory: 53940kb

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: 27ms
memory: 55396kb

input:

1
1413 4867
yumnkkghwtqnhpmmsbfwypcwudihegsvtdaykueuqozagpgdnhbwzoqrqswyctzonwmjdjmmpyzbyihhpyznmqltcuckqmcybbdafoexqztxhzlfjowznisnxtgoiqjztogldyegajmegalqgawrzotuntocmsagvkzdnwhmaewuxiuhvintpzwyrkgapnmegpveyuuorrfvrfakjyetfaoqtvwghlslsvmahrkvzkwpaviufknrpuapicqdnn
yumnkkghwtqnhpmmsbfwypcwudihegsvt...

output:

10

result:

ok 1 number(s): "10"

Test #3:

score: 0
Accepted
time: 55ms
memory: 53892kb

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: 133ms
memory: 53112kb

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: 71ms
memory: 110828kb

input:

1
7 4864
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...

output:

-1

result:

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