UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#197493#3448. 心加心shiruiheng100452ms1596kbC++111.5kb2023-11-12 12:23:202023-11-12 13:20:33

answer

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
ll n, p, x, ans[5010], vis[5010], a[5010], v[5010], len, m[210] = {1};
#define pi pair<ll, ll>
#define pii pair<ll, p>
#define fi first
#define se second
pi t[5010];
char s[210];
priority_queue<pi, vector<pi>, greater<pi>> q;
void debug(ll a[] = ans){
	//system("cls");
	for(int i = 0 ; i < p ; i++)
		cout << a[i] << " \n"[i == p - 1];
}
signed main()
{
	memset(ans, 0x3f, sizeof ans);
    scanf("%lld%lld", &n, &p);
    for(int i = 1 ; i <= 200 ; i++)
    	m[i] = m[i - 1] * 10 % p;
    for(int i = 1 ; i <= n ; i++){
    	scanf("%s", s);
    	a[i] = (len = strlen(s));
    	for(int t = 0 ; t < len ; t++){
    		v[i] = (v[i] * 10ll + (s[t] - '0')) % p;
		}
    	//cout << a[i] << " " << v[i] << "\n";
		t[i] = {a[i], v[i]};
	}
	//sort(t + 1, t + n + 1);
	for(int i = 1 ; i <= n ; i++){
		q.push({t[i].fi, t[i].se});
		ans[t[i].se] = min(ans[t[i].se], t[i].fi);
	}
	int cnt = 0;
	while(q.size() && cnt < p){
		pi u = q.top();
		q.pop();
		if(vis[u.se])
			continue;
		vis[u.se] = true;
		cnt++;
		//debug(); cout << "-" << u.fi << " " << u.se << "\n";
		ans[u.se] = min(ans[u.se], u.fi);
		for(int i = 1 ; i <= n ; i++){
			if(ans[(u.se * m[a[i]] + v[i]) % p] >= u.fi + a[i])
				q.push({u.fi + a[i], (u.se * m[a[i]] + v[i]) % p}), ans[(u.se * m[a[i]] + v[i]) % p] = u.fi + a[i];
		}
	}
	for(int i = 0 ; i < p ; i++)
		printf("%d\n", ans[(p - i) % p] == ans[p] ? -1 : ans[(p - i) % p]);
    exit(0);
}

Details

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

Test #1:

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

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: 24ms
memory: 1560kb

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

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

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

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

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: 25ms
memory: 1556kb

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: 24ms
memory: 1556kb

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: 189ms
memory: 1596kb

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: 189ms
memory: 1592kb

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