QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#767974#9622. 有限小数HeenpeiWA 1ms3656kbC++172.3kb2024-11-20 23:08:272024-11-20 23:08:27

Judging History

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

  • [2024-11-20 23:08:27]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3656kb
  • [2024-11-20 23:08:27]
  • 提交

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];
int solve(int a,int b,int f)
{
	if(!a&&!b) cin>>a>>b;
	//int 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)
	{
		int g=__gcd(b,i);
		int y=a*i;
		int up=ceil((double)y/b*g)*b/g,down=i*b;
		int now=up-y;
		g=__gcd(now,i*b);
		now/=g;
		if(now<=ans)
		{
			if(ans==now) id=min(id,i*b/g);
			else
			{
				ans=now;
				id=i*b/g;
			}
			//if(now==1) cout<<id<<endl;
		}
	}
	if(f) cout<<ans<<" "<<id<<endl;
	return id;
}
void gettest(int t,int T)
{
	for(int i=1;i<=T;i++)
	{
		int a,b;cin>>a>>b;
		if(solve(a,b,0)==2086400000)
		{
			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(0,0,1);
    	//cout<<"&\n";
	}
    return 0;
}
/*
4
1 2
2 3
3 7
19 79

5
28 53
17 60
2 35
17 181
179 182

1
2 35



*/

詳細信息

Test #1:

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

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: 1ms
memory: 3608kb

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:

79 163

result:

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