QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#737309 | #9622. 有限小数 | TheRedStone | WA | 43ms | 3572kb | C++20 | 8.3kb | 2024-11-12 15:26:26 | 2024-11-12 15:26:26 |
Judging History
answer
#include <iostream>
#include <fstream>
#include <vector>
#include <array>
#include <algorithm>
#include <map>
#include <unordered_map>
#include <bitset>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <random>
#include <numeric>
#include <cmath>
#include <utility>
#include <string>
#include <iomanip>
#include <functional>
#define FOR(i, s, e, t) for((i) = (s); (i) <= (e); (i) += (t))
#define ROF(i, s, e, t) for((i) = (e); (i) >= (s); (i) -= (t))
#define REP(s, e) for(long long i = (s); i <= (e); ++i)
#define PER(s, e) for(long long i = (e); i >= (s); --i)
#define ALL(x) (x).begin(), (x).end()
#define LLA(x) (x).rbegin(), (x).rend()
#define SIZE(x) ((int)(x).size())
#define AMONGlr(x, l, r) ((x) >= (l) && (x) <= (r))
#define AMONG(x, l, r) ((x) > (l) && (x) < (r))
#define AMONGl(x, l, r) ((x) >= (l) && (x) < (r))
#define AMONGr(x, l, r) ((x) > (l) && (x) <= (r))
#define pb push_back
#define qb pop_back
#define eb emplace_back
#define fi first
#define se second
#define maxe max_element
#define mine min_element
#define mp make_pair
#define upb upper_bound
#define lowb lower_bound
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
typedef pair<string, string> pss;
typedef pair<string, ll> psl;
typedef pair<ll, string> pls;
typedef pair<string, double> psd;
typedef pair<double, string> pds;
typedef pair<ll, double> pld;
typedef pair<double, ll> pdl;
typedef pair<char, ll> pcl;
typedef pair<ll, char> plc;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<pdd> vpdd;
typedef vector<pss> vpss;
typedef vector<psl> vpsl;
typedef vector<pls> vpls;
typedef vector<psd> vpsd;
typedef vector<pds> vpds;
typedef vector<pld> vpld;
typedef vector<pdl> vpdl;
typedef vector<pcl> vpcl;
typedef vector<plc> vplc;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<bool> vb;
typedef vector<vb> vvb;
typedef vector<double> vd;
typedef vector<vd> vvd;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef vector<string> vs;
typedef vector<vs> vvs;
template<typename T> bool ckMax(T& a, const T& b) { return a < b ? a = b, true : false; }
template<typename T> bool ckMin(T& a, const T& b) { return a > b ? a = b, true : false; }
inline ll read() {
ll x = 0;
short flag = 1;
char c = getchar();
while (c < '0' || c > '9') {
if (c == '-')flag = -1;
c = getchar();
}
while (c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
return x * flag;
}
inline void write(ll x, char end = '\0') {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9)
write(x / 10);
putchar(x % 10 + '0');
if (end != '\0') putchar(end);
}
template<ll P>
struct MInt {
ll x;
inline static ll Mod = 1e9 + 7;
constexpr MInt() : x{ 0 } {}
constexpr MInt(ll x) : x{ norm(x % getMod()) } {}
constexpr static ll getMod() {
if (P > 0) return P;
return Mod;
}
constexpr static MInt power(MInt a, ll b) {
MInt res(1);
while (b > 0) {
if (b % 2) res *= a;
a *= a;
b /= 2;
}
return res;
}
constexpr static void setMod(ll Mod_) {
Mod = Mod_;
}
constexpr ll norm(ll x) const {
if (x < 0) x += getMod();
else if (x >= getMod()) x -= getMod();
return x;
}
constexpr ll val() const {
return x;
}
constexpr MInt inv() const {
return power(*this, getMod() - 2);
}
constexpr MInt operator-() const {
MInt res;
res.x = norm(getMod() - x);
return res;
}
constexpr MInt& operator*=(MInt other)& {
if (getMod() < (1ULL << 31)) x = x * other.x % int(getMod());
else {
x = x * other.x - ll(1.L * x * other.x / getMod()) * getMod();
x = norm(x % getMod());
}
return *this;
}
constexpr MInt& operator+=(MInt other)& {
x = norm(x + other.x);
return *this;
}
constexpr MInt& operator-=(MInt other)& {
x = norm(x - other.x);
return *this;
}
constexpr MInt& operator/=(MInt other)& {
return *this *= other.inv();
}
friend constexpr MInt operator*(MInt a, MInt b) {
a *= b;
return a;
}
friend constexpr MInt operator+(MInt a, MInt b) {
a += b;
return a;
}
friend constexpr MInt operator-(MInt a, MInt b) {
a -= b;
return a;
}
friend constexpr MInt operator/(MInt a, MInt b) {
a /= b;
return a;
}
friend constexpr istream& operator>>(istream& stream, MInt& a) {
ll v;
stream >> v;
a = MInt(v);
return stream;
}
friend constexpr ostream& operator<<(ostream& stream, const MInt& a) {
return stream << a.val();
}
friend constexpr bool operator==(MInt a, MInt b) {
return a.val() == b.val();
}
friend constexpr bool operator!=(MInt a, MInt b) {
return a.val() != b.val();
}
friend constexpr bool operator<(MInt a, MInt b) {
return a.val() < b.val();
}
friend constexpr bool operator>(MInt a, MInt b) {
return a.val() > b.val();
}
friend constexpr bool operator<=(MInt a, MInt b) {
return a.val() <= b.val();
}
friend constexpr bool operator>=(MInt a, MInt b) {
return a.val() >= b.val();
}
};
namespace NumberTheory {
using T = ll;
//必要时改成__int128
inline ll RandInt(ll l, ll r) {
static mt19937 rd(random_device{}());
return uniform_int_distribution<ll>(l, r)(rd);
}
inline ll Mul(T a, T b, T mod) {
T res = a * b - (T)((long double)a * b / mod + 0.5) * mod;
return res < 0 ? res + mod : res;
}
inline ll Plus(ll a, ll b, ll mod) { return a + b >= mod ? a + b - mod : a + b; }
inline ll Sub(ll a, ll b, ll mod) { return a - b < 0 ? a - b + mod : a - b; }
T Pow(T base, T x, T mod = 0) {
T back = 1;
while (x > 0) {
if (x & 1)
if (mod) back = back * base % mod;
else back *= base;
if (mod) base = base * base % mod;
else base *= base;
x >>= 1;
}
if (mod) return back % mod;
return back;
}
bool MillerRabin(ll n) {
static const int TIMES = 7;
static const int TEST[7] = { 2,3,5,7,11,13,17 };
if (n <= 1 || n % 2 == 0 && n > 2) return false;
else if (n <= 3) return true;
ll t = n - 1, k = 0, i, j;
while (!(t & 1)) t >>= 1, k += 1;
FOR(i, 0, TIMES - 1, 1) {
if (n == TEST[i]) return true;
ll a = Pow(TEST[i], t, n), nxt = a;
FOR(j, 1, k, 1) {
nxt = Mul(a, a, n);
if (nxt == 1 && a != 1 && a != n - 1) return false;
a = nxt;
}
if (a != 1) return false;
}
return true;
}
ll PollardRho(ll n) {
ll x, y, z, c, g, i, j;
while (true) {
y = x = RandInt(0, n - 1);
z = 1;
c = RandInt(0, n - 1);
i = 0, j = 1;
while (++i) {
x = Plus(Mul(x, x, n), c, n);
z = Mul(z, abs(x - y), n);
if (x == y || !z) break;
if (!(i % 127) || i == j) {
g = gcd(z, n);
if (g > 1) return g;
if (i == j) y = x, i = 0, j <<= 1;
}
}
}
}
vl GetPrimFactors(ll n) {
vl res;
if (n == 1) return res;
auto dfs = [&](auto&& self, ll x) {
if (MillerRabin(x)) return res.pb(x);
ll y = PollardRho(x);
self(self, x / y);
self(self, y);
};
dfs(dfs, n);
return res;
}
struct C {
static const ll N = 300;
const ll MOD = 998244353;
ll mults[N], invs[N];
void init() {
mults[0] = 1;
REP(1, N - 1) mults[i] = Mul(mults[i - 1], i, MOD);
invs[N - 1] = Pow(mults[N - 1], MOD - 2, MOD);
PER(0, N - 2) invs[i] = Mul(invs[i + 1], i + 1, MOD);
}
inline ll calV(ll n, ll m) {
if (m > n || n < 0 || m < 0) return 0;
else if (m == 0 || m == n) return 1;
return Mul(Mul(mults[n], invs[n - m], MOD), invs[m], MOD);
}
};
}
int __init__ = []() {
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
return 0;
}();
pll getRes(ll a, ll b) {
ll c = gcd(a, b);
return {a / c, b / c};
}
void solve() {
const ll BOUND = 1e9;
ll a, b;
cin >> a >> b;
ll tmp = b;
while(tmp % 2 == 0) tmp /= 2;
while(tmp % 5 == 0) tmp /= 5;
if(tmp == 1) {
cout << 0 << " " << 1 << endl;
return;
}
pll res = {tmp - a % tmp, b};
ll d = b;
ll p2 = 1, p5 = 1;
while(b * p2 <= BOUND) {
ckMin(res, getRes(tmp - a * p2 % tmp, b * p2));
p5 = 5;
while(b * p2 * p5 <= BOUND) {
ckMin(res, getRes(tmp - a * p2 * p5 % tmp, b * p2 * p5));
p5 *= 5;
}
p2 *= 2;
}
cout << res.fi << " " << res.se << endl;
}
int main() {
ll t = 1;
cin >> t;
while (t--) solve();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3572kb
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: 43ms
memory: 3572kb
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 12 1 54272 1 60 1 7 1 231680000 23 3936 1 36096000 5 326 1 63360 0 1 1 31232 0 1 1 4880 1 10750 1 18500 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 48 3 347500 1 944 1 43600 1 76 1 430000 1 6336 1 ...
result:
wrong answer Jury found better answer than participant's 1 < 2 (Testcase 8812)