QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#767709#9622. 有限小数HeenpeiWA 1ms3696kbC++172.3kb2024-11-20 21:49:062024-11-20 21:49:10

Judging History

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

  • [2024-11-20 21:49:10]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3696kb
  • [2024-11-20 21:49:06]
  • 提交

answer

#include<bits/stdc++.h>
#include<map>
#include<queue>
#include<set>
#include<vector>
#define int long long
#define ull unsigned long long
#define endl '\n'
#define all(s) s.begin(),s.end()
#define xx first
#define yy second
#define inf 0x3f3f3f3f3f3f3f3f
#define N 1000005
#define mod 1000000007//998244353
#define double long double
#define lowbit(x) ((x)&(-x))
//#define ll long long
#define ls(x) (x<<1)
#define rs(x) ((x<<1)|1)
#define pll pair<int,int> 
#define __lcm(a,b) (a/__gcd(a,b)*b)
const double pi=acos(-1);
const int P=233333;
const int PP=1313131;
const int mod1=1000001011;
const int mod2=(1ll<<31)-1;
using namespace std;
int qmi(int b,int k)
{
	int ans=1;
	while(k)
	{
		if(k&1) ans*=b;
		b*=b,k>>=1;
	}
	return ans;
}
vector<int> v;
void init(int n)
{
	//int cnt=0;
	for(int i=0;i<=31;i++)
	{
		for(int j=0;j<=n&&qmi(2,i)*qmi(5,j)<=n;j++)
		{
			int x=qmi(2,i)*qmi(5,j);
			v.push_back(x);
			//cout<<++cnt<<" "<<qmi(2,i)*qmi(5,j)<<endl;
		}
	}
	sort(all(v));
} 
bool check(int x)
{
	while(x%2==0) x/=2;
	while(x%5==0) x/=5;
	return x==1;
}
bool query(int a,int b,int c,int d)
{
	int n=b*d;
	a*=d,c*=b;
	int m=a+c;
	int g=__gcd(n,m);
	n/=g,m/=g;
	if(check(n)) cout<<m<<" "<<n<<endl;
	return check(n);
}
int arr[N];
void solve()
{
	int a,b;cin>>a>>b;
	/*for(int i=1;i<=10000000;i++)
	{
		if(query(a,b,1,i))
		{
			cout<<i<<endl;
			return ;
		}
	}*/
	int ans=b-a,id=b;
	for(auto i:v)
	{
		if(i==6250)
		{
			cout<<"";
		}
		int g=__gcd(b,i);
		int x=a*i/g,y=i/g*b/g;
		int up=ceil((double)x/b*g),down=i;
		int now=up*b-a*down;
		now/=__gcd(now,i*b);
		if(now<=ans)
		{
			if(ans==now) id=min(id,y);
			else
			{
				ans=now;
				id=y;
			}
			//if(now==1) cout<<id<<endl;
		}
	}
	cout<<ans<<" "<<id<<endl;
}
void gettest(int t,int T)
{
	for(int i=1;i<=T;i++)
	{
		int a,b;cin>>a>>b;
		if(i==t)
		{
			cout<<a<<" "<<b<<endl;
			return ;
		}
	}
}
signed main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int T=1;
	cin>>T;
	init(1000000000);
    if(T==10000)
    {
    	gettest(321,T);
    	return 0;
	}
	while(T--)
    {
    	solve();
    	//cout<<"&\n";
	}
    return 0;
}
/*
4
1 2
2 3
3 7
19 79

4
28 53
17 60
2 35
17 181

1
179 182





*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3580kb

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: 0ms
memory: 3696kb

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:

179 182

result:

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