QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#409201#8111. CoachesJohnAlfnovWA 21ms3928kbC++201.2kb2024-05-11 20:24:582024-05-11 20:24:59

Judging History

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

  • [2024-05-11 20:24:59]
  • 评测
  • 测评结果:WA
  • 用时:21ms
  • 内存:3928kb
  • [2024-05-11 20:24:58]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
int pan(int c,int a,int b,int d);
int nap(int c,int a,int b,int d);
long long panduan(int c,int a,int b,int d){
	int A=a,C=c;
	a%=b;c%=b;
	if(c>=d)return C;
	if(!a)return LLONG_MAX;
	c=b-1-c;a=b-a;d=b-1-d;
	int kk=pan(c,a,b,d);
	if(kk==-1)return LLONG_MAX;
	return C+1ll*kk*A;
}
int main(){
	int T;
	scanf("%d",&T);
	while(T--){
		long long n;
		int a,b;
		scanf("%lld%d%d",&n,&a,&b);
		long long l=1ll*a*b/__gcd(a,b);
		long long yc=n/a+n/b-2*(n/l);
		int ra=n%a,rb=n%b;
		long long rl=n%l;
		int ys=(rl>min(ra,rb));
		if(panduan(ra,a,b,rb)<rl)ys=2;
		if(panduan(rb,b,a,ra)<rl)ys=2;
		printf("%lld\n",n-yc+ys);
	}
	return 0;
}
int pan(int c,int a,int b,int d){
	if(c<=d)return 0;
	if(a==0)return -1;
	if(2*a>b)return nap(b-1-c,b-a,b,b-1-d);
	int k1=(b-c+a-1)/a,cc=(c+1ll*k1*a)%b;
	int aa=(a-b%a)%a;
	int cs=pan(cc,aa,a,d);
	if(cs==-1)return -1;
	int an=(b+a-1)/a*cs+k1-(cc+1ll*aa*cs)/a;
	return an;
}
int nap(int c,int a,int b,int d){
	if(c>=d)return 0;
	if(a==0)return -1;
	int k1=(d-c+a-1)/a,cc=c+k1*a;
	if(cc<b)return k1;
	int cs=pan(cc-d+1,a,b,b-d-1);
	if(cs==-1)return -1;
	return cs+k1;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3928kb

input:

2
5 2 3
10 7 2

output:

3
6

result:

ok 2 number(s): "3 6"

Test #2:

score: 0
Accepted
time: 1ms
memory: 3904kb

input:

1728
7 6 3
10 12 1
6 2 7
8 4 10
11 10 5
1 6 8
3 3 5
9 2 6
11 1 5
1 1 8
7 3 6
6 10 9
2 1 7
3 4 7
8 3 4
4 5 9
9 4 3
6 2 8
11 4 1
6 8 4
11 1 8
9 11 2
9 6 1
5 3 8
7 1 8
7 11 12
3 9 1
2 12 6
7 2 6
5 11 10
9 5 3
3 6 2
7 5 5
12 4 3
7 8 2
8 11 11
10 1 10
5 1 7
9 1 7
8 1 6
8 4 6
5 5 11
12 3 7
3 6 8
6 3 11
6 ...

output:

6
1
4
7
10
1
3
7
3
1
6
6
1
3
6
4
6
4
3
6
2
6
2
5
1
7
1
2
5
5
7
3
7
7
5
8
1
1
2
2
7
5
9
3
5
4
11
3
1
1
12
3
7
1
5
5
12
2
10
1
9
5
1
2
10
6
3
12
1
12
10
6
1
7
2
5
10
7
11
9
2
3
1
6
9
8
2
5
3
3
10
1
9
11
2
8
8
7
7
9
3
1
2
3
1
3
3
9
4
6
8
1
12
6
3
10
1
1
9
12
6
1
9
11
1
6
2
3
12
7
6
6
9
11
9
1
2
5
2
4
4...

result:

ok 1728 numbers

Test #3:

score: -100
Wrong Answer
time: 21ms
memory: 3904kb

input:

97336
24 2 23
23 31 33
11 38 46
13 19 11
44 45 5
41 37 42
44 16 29
31 33 17
34 26 39
16 17 20
42 15 36
30 10 2
37 42 3
1 41 45
10 9 5
8 33 5
21 44 8
2 30 15
42 32 32
19 22 43
22 46 5
34 1 30
12 4 12
23 43 6
42 2 39
16 38 20
16 19 5
43 8 13
11 24 4
41 20 31
29 42 31
42 13 41
39 5 25
10 11 1
39 35 32
...

output:

13
23
11
13
37
41
43
31
34
16
41
18
26
1
9
8
20
2
42
19
19
2
10
21
22
16
14
37
10
40
29
40
34
1
39
42
18
44
34
9
26
16
3
13
1
19
17
10
23
16
39
1
36
18
7
18
24
32
43
15
30
37
18
3
26
6
34
16
38
15
2
1
33
10
18
22
27
39
11
18
38
23
16
37
3
2
11
6
31
27
23
2
40
25
18
11
25
3
5
8
33
11
39
16
43
39
16
3...

result:

wrong answer 4489th numbers differ - expected: '15', found: '16'