QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#767444#9622. 有限小数MaxDYF#WA 123ms9696kbC++141.9kb2024-11-20 20:58:322024-11-20 20:58:33

Judging History

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

  • [2024-11-20 20:58:33]
  • 评测
  • 测评结果:WA
  • 用时:123ms
  • 内存:9696kb
  • [2024-11-20 20:58:32]
  • 提交

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{
	ll gcd,x,y;
	inline GCD(){}
	inline GCD(const GCD &)=default;
	inline GCD(const ll g,const ll X,const ll Y):
		gcd(g),x(X),y(Y){}
};
inline GCD exgcd(const ll a,const ll 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);
}
ll minc,mind;
inline void getans(const word d0,const ll a0,const ll d){
	GCD g=exgcd(d0,p);
	ull c=1ull*(d0-(g.y%d0))*(a0%d0)%d0;
	if(minc>c) minc=c,mind=d;
}
inline void dfs2(const word d0,ll a0,ll d){
	while(getans(d0,a0,d),((ulll(a0)<<1)>>63)==0
		&&((ulll(d)<<1)>>63)==0) a0<<=1,d<<=1;
}
inline void dfs5(const word d0,ll a0,ll d){
	while(dfs2(d0,a0,d),((ulll(a0)*5)>>63)==0
		&&((ulll(d)*5)>>63)==0) 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;
		minc=b-a,mind=b,dfs(b);
		printf("%lld %lld\n",minc,mind);
	}
	return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 24ms
memory: 9696kb

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: 123ms
memory: 9668kb

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 378493992960
1 17091788800000000
1 63360
0 1
1 31232
0 1
1 4093640704
1 44032
1 1271310319616
1 11714560
1 14227079168
1 2944
1 31
1 6
1 289600000
1 455000
1 58880
1 86973087744
0 1
1 304
0 1
1 11140071424
1 19328000
1 20054016000
1 3892314112
1 608
1 72192
...

result:

wrong answer Integer 378493992960 violates the range [1, 10^9]