UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#197409#3448. 心加心FAT100659ms216712kbC++111.3kb2023-11-12 08:55:312023-11-12 13:11:49

answer

#include <bits/stdc++.h>
#define PB push_back
#define EB emplace_back
using namespace std;
const int maxn = 5000, maxl = 200;
char str[maxl + 5];
int pw10[maxl + 5];
int len[maxn + 5], V[maxn + 5];
struct edge {
	int v, w;
	bool operator<(const edge& b) const { return w > b.w; }
};
vector<edge> g[maxn + 5];
int dis[maxn + 5];
bool vis[maxn + 5];
void dijkstra(int s) {
	priority_queue<edge> q;
	memset(dis, 127, sizeof(dis));
	dis[s] = 0, q.push({s, 0});
	while (!q.empty()) {
		int u = q.top().v; q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (const auto& e : g[u])
			if (dis[e.v] > dis[u] + e.w) {
				dis[e.v] = dis[u] + e.w;
				q.push((edge){e.v, dis[e.v]});
			}
	}
}
int main() {
	int n, p;
	scanf("%d%d", &n, &p);
	pw10[0] = 1;
	for (int i = 1; i <= maxl; i++) pw10[i] = 10 * pw10[i - 1] % p;
	for (int i = 1; i <= n; i++) {
		scanf("%s", str + 1);
		len[i] = strlen(str + 1);
		for (int j = 1; j <= len[i]; j++) V[i] = (V[i] * 10 + str[j] - '0') % p;
	}
	for (int i = 0; i < p; i++)
		for (int j = 1; j <= n; j++) g[i].PB({(i * pw10[len[j]] + V[j]) % p, len[j]});
	dijkstra(0);
	int d0 = 1E9;
	for (int i = 0; i < p; i++)
		for (const auto& e : g[i])
			if (!e.v) d0 = min(d0, dis[i] + e.w);
	printf("%d\n", d0 >= 1E9 ? -1 : d0);
	for (int i = p - 1; i; i--) printf("%d\n", dis[i] >= 1E9 ? -1 : dis[i]);
} 

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 0ms
memory: 1408kb

input:

10 98
0
1
2
3
4
5
6
7
8
9

output:

1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 98 numbers

Test #2:

score: 10
Accepted
time: 20ms
memory: 5624kb

input:

5000 99
14781892056687055378359451878122218601921996058131918743098670380384485452067769009096639454...

output:

1
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
...

result:

ok 99 numbers

Test #3:

score: 10
Accepted
time: 0ms
memory: 1392kb

input:

3 99
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5
0
4
5...

output:

1
4
7
7
4
4
5
5
8
4
4
4
8
8
4
4
8
9
8
4
8
8
8
8
8
8
8
9
7
7
7
7
7
6
5
5
5
5
6
3
3
3
7
6
2
2
5
5
6
2
...

result:

ok 99 numbers

Test #4:

score: 10
Accepted
time: 1ms
memory: 1400kb

input:

6 95
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9
0
2
3
5
6
9...

output:

1
3
2
2
3
2
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
2
3
3
2
2
3
2
2
3
2
2
3
3
2
2
3
2
2
3
2
3
3
3
3
...

result:

ok 95 numbers

Test #5:

score: 10
Accepted
time: 0ms
memory: 1392kb

input:

5 3
412
986
7687
79583
8318

output:

6
3
3

result:

ok 3 number(s): "6 3 3"

Test #6:

score: 10
Accepted
time: 0ms
memory: 1388kb

input:

5 3
5387
39817
6
6804
1

output:

1
2
1

result:

ok 3 number(s): "1 2 1"

Test #7:

score: 10
Accepted
time: 23ms
memory: 5628kb

input:

5000 100
4662215847345417996058539422385909140989122582319939315897492645456767910985172332639303829...

output:

180
180
180
180
180
180
180
180
180
180
180
181
180
180
180
181
180
180
180
181
181
180
180
181
180
...

result:

ok 100 numbers

Test #8:

score: 10
Accepted
time: 25ms
memory: 5628kb

input:

5000 100
6017404839398900982117908052227697611177103082938397805192623914538500903540418343249962031...

output:

180
180
180
181
182
180
180
181
180
181
180
180
180
180
180
180
180
180
180
180
180
181
180
180
180
...

result:

ok 100 numbers

Test #9:

score: 10
Accepted
time: 316ms
memory: 216708kb

input:

5000 5000
173577890992330520159895384217403731027027923558584792233344058149389687419038746812531024...

output:

196
184
183
192
192
195
-1
181
194
199
180
-1
180
-1
-1
-1
190
194
-1
185
182
-1
-1
-1
188
184
-1
19...

result:

ok 5000 numbers

Test #10:

score: 10
Accepted
time: 274ms
memory: 216712kb

input:

5000 5000
109684703722761599523811752824414002980896386859466348397242225190298237477285061568577404...

output:

184
180
191
185
195
195
-1
182
181
183
199
-1
192
-1
-1
-1
181
182
-1
185
-1
188
189
190
-1
190
188
...

result:

ok 5000 numbers

Extra Test:

score: 0
Extra Test Passed