結果
| 問題 |
No.2262 Fractions
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2023-04-07 23:18:08 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,542 bytes |
| コンパイル時間 | 1,994 ms |
| コンパイル使用メモリ | 196,252 KB |
| 最終ジャッジ日時 | 2025-02-12 02:44:30 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | TLE * 1 |
| other | WA * 10 TLE * 35 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main () {
int T;
cin >> T;
vector<vector<int>> X(300030);
for (int i = 1; i <= 300000; i ++) {
for (int j = 1; i * j <= 300000; j ++) {
X[i * j].push_back(i);
}
}
int meb[300030];
fill(meb, meb + 300030, -2);
meb[1] = 1;
for (int i = 2; i <= 300000; i ++) {
if (meb[i] == -2) {
meb[i] = -1;
}
for (int j = 2; i * j <= 300000; j ++) {
meb[i * j] *= -1;
if (j % i == 0) {
meb[i * j] = 0;
}
}
}
while (T --) {
ll N, K;
cin >> N >> K;
if (N == 1) {
puts("1/1");
continue;
}
ll lb = 1, ls = 0, rb = 0, rs = 1;
bool ok = false;
while(true) {
ll b = lb + rb, s = ls + rs;
if (b > N || s > N) {
break;
}
ll sum = 0;
for (ll m = 1; m <= N; m ++) {
ll n = min(N, (m * s) / b);
for (auto a : X[m]) {
sum += (n / a) * meb[a];
}
}
if (sum <= K) {
lb = b; ls = s;
} else {
rb = b; rs = s;
}
if (sum == K) {
ok = true;
break;
}
}
if (ok) {
printf("%lld/%lld\n", ls, lb);
} else {
puts("-1");
}
}
}