QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#767598#9622. 有限小数MaxDYF#WA 51ms9804kbC++141.9kb2024-11-20 21:23:442024-11-20 21:23:51

Judging History

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

  • [2024-11-20 21:23:51]
  • 评测
  • 测评结果:WA
  • 用时:51ms
  • 内存:9804kb
  • [2024-11-20 21:23:44]
  • 提交

answer

#include<stdio.h>
#include<string.h>
typedef __int128_t lll;
typedef __uint128_t ulll;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int word;
typedef unsigned char byte;
word case_,n;
word bef[1<<20],nxt[1<<20];
struct READ{
	char c;
	inline READ(){
		bef[1]=1,nxt[1]=0;
		for(word i=2;i<(1<<20);++i) if(bef[i]==0){
			for(word j=1,before=0;j;j=nxt[j])
				if(1ull*j*i<(1<<20)){
					nxt[j*i]=nxt[j],nxt[j]=j*i;
					bef[j*i]=i,before=j;
				}else nxt[before]=nxt[j];
		}
		c=getchar();}
	template<typename type>
	inline READ& operator>>(type &num){
		while('0'>c||c>'9') c=getchar();
		for(num=0;'0'<=c&&c<='9';c=getchar())
			num=num*10+(c-'0');
		return *this;
	}
}cin;
word a,b,p;
struct GCD{
	lll gcd,x,y;
	inline GCD(){}
	inline GCD(const GCD &)=default;
	inline GCD(const lll g,const lll X,const lll Y):
		gcd(g),x(X),y(Y){}
};
inline GCD exgcd(const lll a,const lll b){
	if(b==0) return GCD(a,1,0);
	const GCD gcd=exgcd(b,a%b);
	return GCD(gcd.gcd,gcd.y,gcd.x-(a/b)*gcd.y);
}
ull minc,mind;
inline void getans(const word d0,const lll a0,const word d){
	GCD g=exgcd(d0,p);
	if(g.y<0) g.y=(-g.y)%d0;
	else g.y=d0-(g.y%d0);
	ull c=1ull*(a0%d0)*g.y%d0;
	if(minc>c) minc=c,mind=d;
}
inline void dfs2(const word d0,lll a0,word d){
	while(getans(d0,a0,d),2ull*d<=1e9) a0<<=1,d<<=1;
}
inline void dfs5(const word d0,lll a0,word d){
	while(dfs2(d0,a0,d),5ull*d<=1e9) a0*=5,d*=5;
}
inline void dfs(word step,word now=1){
	if(step==1){
		if(a%(b/now)==0) dfs5(now,a/(b/now),now);
		return;
	}
	word p=bef[step],cnt=0;
	while(step%p==0) ++cnt,step/=p;
	for(word i=0;i<=cnt;++i,now*=p)
		dfs(step,now);
}
int main(){
	for(cin>>case_;case_;--case_){
		cin>>a>>b,p=1;
		while(b%2==0) b/=2,p*=2;
		while(b%5==0) b/=5,p*=5;
		if(b==1){
			puts("0 1");
			continue;
		}
		minc=b-a,mind=b,dfs(b);
		printf("%llu %llu\n",minc,mind);
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 27ms
memory: 9756kb

input:

4
1 2
2 3
3 7
19 79

output:

0 1
1 3
1 14
3 316

result:

ok 4 case(s)

Test #2:

score: -100
Wrong Answer
time: 51ms
memory: 9804kb

input:

10000
11 12
28 53
17 60
2 35
17 181
80 123
68 141
79 163
71 99
13 64
33 61
15 32
16 61
11 86
33 74
128 143
40 53
7 23
30 31
5 6
86 181
73 91
13 23
71 81
1 2
7 38
117 160
33 83
129 151
88 153
25 58
16 19
19 141
95 124
43 96
71 139
11 59
106 109
93 152
34 43
17 99
1 57
20 159
16 25
5 73
159 170
172 17...

output:

1 3
1 54272
1 6
1 7
1 231680000
23 3936
1 36096000
5 326
1 63360
0 1
1 31232
0 1
1 4880
1 44032
1 757760
1 11714560
1 331250
1 2944
1 31
1 6
1 289600000
1 455000
1 58880
1 51840
0 1
1 304
0 1
1 415
1 19328000
1 765000000
1 4640
1 608
1 72192
3 775
1 3
3 347500
1 944
1 43600
1 76
1 1761280
1 6336
1 2...

result:

wrong answer The result is not terminating.(Testcase 245)