QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#67491#4124. 随机数生成器alpha1022100 ✓22ms2224kbC++231.7kb2022-12-10 16:28:382022-12-10 16:29:02

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-12-10 16:29:02]
  • 评测
  • 测评结果:100
  • 用时:22ms
  • 内存:2224kb
  • [2022-12-10 16:28:38]
  • 提交

answer

#include <cmath>
#include <cstdio>
#include <cstring>
using namespace std;
int T,mod,a,b,c,t;
namespace HASH
{
	const int N = 31700;
	const int mod = 70921;
	int key[N + 5],val[N + 5],pre[N + 5],first[mod + 5],tot;
	void clear()
	{
		tot = 0;
		memset(first,0,sizeof first);
	}
	void insert(int x,int v)
	{
		int h = x % mod;
		int flag = 0;
		for(register int i = first[h];i;i = pre[i])
			if(key[i] == x)
			{
				flag = 1;
				break;
			}
		if(!flag)
			key[++tot] = x,val[tot] = v,pre[tot] = first[h],first[h] = tot;
	}
	int query(int x)
	{
		int h = x % mod;
		for(register int i = first[h];i;i = pre[i])
			if(key[i] == x)
				return val[i];
		return -1;
	}
}
inline int fpow(int a,int b,int mod)
{
	int ret = 1;
	for(;b;b >>= 1)
		(b & 1) && (ret = (long long)ret * a % mod),a = (long long)a * a % mod;
	return ret;
}
inline int bsgs(int a,int b,int mod)
{
	HASH::clear();
	int lim = ceil(sqrt(mod));
	int alim = fpow(a,lim,mod);
	for(register int i = 0;i <= lim;++i)
		HASH::insert(b,i),b = (long long)b * a % mod;
	int prod = alim;
	for(register int i = 1,x;i <= lim;++i,prod = (long long)prod * alim % mod)
	{
		x = HASH::query(prod);
		if(~x)
			return i * lim - x + 1;
	}
	return -1;
}
int main()
{
	scanf("%d",&T);
	for(;T;--T)
	{
		scanf("%d%d%d%d%d",&mod,&a,&b,&c,&t);
		if(c == t)
		{
			puts("1");
			continue;
		}
		if(!a)
		{
			puts(b == t ? "2" : "-1");
			continue;
		}
		if(a == 1)
		{
			if(!b)
				puts("-1");
			else
				printf("%lld\n",(long long)(t - c + mod) * fpow(b,mod - 2,mod) % mod + 1);
			continue;
		}
		int inv = (long long)b * fpow(a - 1,mod - 2,mod) % mod;
		printf("%d\n",bsgs(a,(long long)(t + inv) * fpow(c + inv,mod - 2,mod) % mod,mod));
	}
}

詳細信息

Test #1:

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

input:

50
102187739 1 0 98635663 98635663
718122103 1 0 75673980 75673980
406441663 1 0 373516519 179271985
572094323 1 0 450255823 11000520
315298601 1 100578433 216519432 311376893
451463167 1 205407670 55950100 37244743
351770801 1 680155 301361592 217442431
22216561 1 13353739 2640981 19855423
18446922...

output:

1
1
-1
-1
185559292
348814060
245604585
3647233
149357091
93814897
1
1
-1
-1
175177161
102633345
32073403
8892407
56991053
16235605
3741553
104593933
77853817
12097364
145267757
128080878
15993658
42824652
21173410
577198665
2095506
312409635
85194781
136196780
107268856
178139446
9154129
62601312
2...

result:

ok 50 lines

Test #2:

score: 10
Accepted
time: 19ms
memory: 2192kb

input:

50
102623957 1 0 86936041 86936041
196338127 1 0 128004150 128004150
423161527 1 0 337398175 87268940
259622497 1 0 242479911 44183211
737805581 1 0 298357500 198398101
687507083 1 0 120669797 213662358
621244067 1 0 192672331 253549661
344688359 1 0 113286489 146949020
708670393 1 0 443430892 33693...

output:

1
1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
-1
16189959
14745670
-1
113099108
-1
199807465
130296929
77094201
95926080
-1
-1
-1
44402417
27512375
15974515
45227207
264138635
-1
-1
-1
-1
-1
65186581
-1
380406184
-1
-1
-1
122718115
333833952
222370455
30426548
-1
-1
45175004

result:

ok 50 lines

Test #3:

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

input:

50
23 0 4 5 5
3 0 0 2 2
29 0 15 27 15
31 0 15 30 15
59 0 48 27 16
67 0 17 33 45
29 1 0 22 22
47 1 0 7 7
23 1 0 17 5
79 1 0 24 62
29 1 18 16 23
53 1 14 41 21
23 1 2 5 5
23 1 1 15 6
41 1 28 29 7
53 1 5 40 8
41 24 0 0 0
67 37 0 0 0
37 31 0 0 1
29 14 0 0 10
23 20 6 13 8
17 0 2 1 2
47 18 9 11 14
29 24 22...

output:

1
1
2
2
-1
-1
1
1
-1
-1
3
45
1
15
9
37
1
1
-1
-1
-1
2
5
-1
1
38
1
21
-1
-1
-1
35
-1
-1
-1
53
29
22
3
56
30
-1
-1
-1
-1
6
1
7
-1
11

result:

ok 50 lines

Test #4:

score: 10
Accepted
time: 15ms
memory: 2212kb

input:

50
102405847 0 0 13141634 13141634
197771033 0 0 176945843 176945843
556432027 0 0 75983001 396297290
703040029 0 0 641438112 360382963
415087769 0 0 32630586 402090711
168918023 0 0 148638577 131836763
247000597 1 0 50428703 50428703
183436061 1 0 171703712 171703712
105866503 1 0 46387548 23120149...

output:

1
1
-1
-1
-1
-1
1
1
-1
-1
-1
-1
-1
-1
-1
-1
1
1
-1
-1
77193721
-1
3046190
-1
-1
26694414
1752817
454450225
-1
10629357
-1
17402535
275006041
606133
58093848
12321227
-1
33969499
11369770
95845179
-1
560107674
82737834
-1
32398260
24252126
110974361
146234548
67896720
-1

result:

ok 50 lines

Test #5:

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

input:

50
102002419 1 0 1779577 1779577
42143183 1 0 41959759 41959759
398098159 1 0 391559262 79657487
191459327 1 0 147084113 80165492
640916033 1 179964357 7599499 303943279
70295737 1 8724628 5836795 38637442
217034177 1 123212050 138688430 66727777
134738911 1 19856795 74032287 110605730
196126831 1 1...

output:

1
1
-1
-1
61466504
17890521
100186159
48188148
53603294
3880359
1
1
-1
-1
77164951
501237012
945411
425301927
153023658
230320986
70220637
119188392
695438769
95887574
44008877
54247971
355817453
207066946
36914083
224803235
427252074
63150493
82778437
420486552
6744540
1675824
111682188
342018082
6...

result:

ok 50 lines

Test #6:

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

input:

50
7 0 4 6 6
67 0 18 24 24
11 0 10 4 10
29 0 3 17 3
41 0 1 36 27
29 0 20 24 22
59 1 0 17 17
79 1 0 76 76
59 1 0 11 56
37 1 0 4 20
29 1 10 18 26
79 1 11 48 15
23 1 1 1 13
31 1 30 0 6
67 1 54 44 38
53 1 44 30 52
47 44 0 0 0
5 4 0 0 0
23 22 0 0 15
67 59 0 0 33
29 23 6 4 27
59 47 38 26 44
29 9 27 4 6
17...

output:

1
1
2
2
-1
-1
1
1
-1
-1
25
77
13
26
53
28
1
1
-1
-1
3
13
-1
16
-1
-1
4
20
17
6
25
-1
2
-1
-1
-1
3
-1
2
14
-1
13
16
56
-1
36
-1
-1
3
-1

result:

ok 50 lines

Test #7:

score: 10
Accepted
time: 22ms
memory: 2224kb

input:

50
102733013 0 55602410 55136097 55136097
230008013 0 44188531 65686043 65686043
585251939 0 401575345 47495968 401575345
83006969 0 38158715 47635496 38158715
776879669 0 119722684 238098409 697098889
190919023 0 30961581 115838854 178126046
165459071 10837 0 0 0
108950197 18555 0 0 0
26569129 2413...

output:

1
1
2
2
-1
-1
1
1
-1
-1
153441670
14628806
170546390
19202106
139449932
-1
-1
241820519
42132584
-1
275022677
-1
-1
-1
194983770
-1
-1
-1
630060540
126128130
-1
-1
179836066
4214567
141848399
77024608
-1
-1
408342919
-1
79112063
168452567
-1
282772862
25819756
162548273
799086
-1
105804969
186680918

result:

ok 50 lines

Test #8:

score: 10
Accepted
time: 17ms
memory: 2220kb

input:

50
102842053 0 80448338 84332169 84332169
331979117 0 99525942 86902228 86902228
236977409 0 166302668 215321622 166302668
143028647 0 126196390 32909893 126196390
181660019 0 157810278 87014476 68783950
647402983 0 301871165 108544861 253533831
138311321 1 0 41769424 41769424
505907789 1 0 41664817...

output:

1
1
2
2
-1
-1
1
1
-1
-1
70261874
31415049
105308527
690327778
257033571
20052364
1
1
-1
-1
192584724
-1
-1
-1
-1
116913337
58517126
1667330
-1
58835454
654005927
66641570
270104958
20604226
646518335
-1
-1
-1
9578315
-1
-1
-1
339358973
187748948
-1
21888714
3482989
-1
-1
-1

result:

ok 50 lines

Test #9:

score: 10
Accepted
time: 18ms
memory: 2204kb

input:

50
102514931 0 0 43242667 43242667
26033071 0 0 10450263 10450263
208124711 0 0 21181664 189910097
763061771 0 0 59714823 363776137
93609949 0 0 79238980 32366103
351692927 0 0 202166385 99115558
219820157 4637 0 0 0
366960551 17627 0 0 0
634562683 15551 0 0 580373382
624821489 10341 0 0 239296472
5...

output:

1
1
-1
-1
-1
-1
1
1
-1
-1
-1
67101006
10284009
-1
-1
-1
210212375
144206412
27116327
22874896
-1
-1
77365742
-1
-1
126823516
4649397
484830407
411730813
141500555
143794014
-1
-1
2836611
23010909
-1
81907034
-1
70944806
-1
-1
-1
-1
1514978
167585351
-1
51884155
63264096
18429499
12895177

result:

ok 50 lines

Test #10:

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

input:

50
102078701 1 0 76734173 76734173
380116237 1 0 311708757 311708757
139124443 1 0 89185586 110173182
118631353 1 0 24928144 48580466
215010989 1 24146111 53295870 142103575
124024921 1 107082533 53083360 33911568
284418907 1 71111559 44090425 250585740
478461353 1 250582546 64055605 432465404
59031...

output:

1
1
-1
-1
65489294
60576802
275561366
353536692
385862949
263459731
84145734
64988229
10639493
231733400
19879575
22437248
207959503
15140302
138281092
136533762
130245705
13165897
374005877
74538641
60059080
126622536
283023707
16231167
427231095
599909333
773153608
48797524
7868593
197025070
50940...

result:

ok 50 lines