QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#740358#9622. 有限小数TDXIAOWA 35ms3828kbC++201.5kb2024-11-13 09:19:482024-11-13 09:19:49

Judging History

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

  • [2024-11-13 09:19:49]
  • 评测
  • 测评结果:WA
  • 用时:35ms
  • 内存:3828kb
  • [2024-11-13 09:19:48]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

#define ll long long
const int mod = 1e9+7;
const int INF = 1e9;
const int N = 1e5+2;

ll exgcd(ll a, ll b, ll &x, ll &y) {
	if (b == 0) {
		x = 1;
		y = 0;
		return a;
	}
	ll d = exgcd(b, a%b, x, y);
	ll t = x;
	x = y;
	y = t-(a/b)*y;
	return d;
}

void solve() {
	ll ta, tb;
	cin>>ta>>tb;
	ll q = tb;
    ll t0 = 1;
	while (q%2 == 0) q /= 2, t0 *= 2;
	while (q%5 == 0) q /= 5, t0 *= 5;
	vector<ll> v2, v5;
	for (ll i = 1; i <= INF; i *= 2) {
		v2.push_back(i);
	}
	for (ll i = 1; i <= INF; i *= 5) {
		v5.push_back(i);
	}
	// ta*td + tb*tc = k*(tb0 * tb0)
	ll ans = 1e18, ansb = -1;
	for (auto vv2 : v2) {
		for (auto vv5 : v5) {
            if ((__int128)t0*vv2*vv5*q > INF) continue;
			if (vv2*vv5 > INF) continue;
			ll td = vv2*vv5*q;
			if (td > INF) continue;
			ll a = tb;
			ll b = q*q;
			ll c = -ta * td;
			ll x, y;
			ll d = exgcd(a, b, x, y);
			if (c%d) continue;
			a /= d, b /= d, c /= d;//同除公约数,不然遍历通解会有遗漏
			x *= c, y *= c;//得到ax+by=c的一组解
			x = (x%b + b)%b;
			y = (c-a*x)/b;
			// if (y > 0) continue;
			if (ans > x) {
				ans = x;
				ansb = td;
			}
		}
	}
	cout<<ans<<' '<<ansb<<'\n';
}	

int main()
{
	if (ifstream("test.in")) {
		freopen("test.in", "r", stdin);
		freopen("test.out", "w", stdout);
	}
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T = 1;
	cin>>T;
	while (T--) {
		solve();
	}
	return 0;
}

详细

Test #1:

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

input:

4
1 2
2 3
3 7
19 79

output:

0 1
1 3
1 4375
3 316

result:

ok 4 case(s)

Test #2:

score: -100
Wrong Answer
time: 35ms
memory: 3828kb

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 828125000
1 15
1 7
1 231680000
23 960937500
1 36096000
5 326
1 63360
0 1
1 61000
0 1
1 4880
1 10750
1 18500
1 11714560
1 331250
1 898437500
1 31
1 15
1 289600000
1 455000
1 115000000
1 1265625
0 1
1 1484375
0 1
1 415
1 235937500
1 765000000
1 181250
1 2968750
1 4406250
3 775
1 3
3 347500
1 944...

result:

wrong answer Jury found better answer than participant's 1 < 2 (Testcase 597)