QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#856868 | #9962. Diminishing Fractions | IllusionaryDominance# | WA | 188ms | 5964kb | C++20 | 2.4kb | 2025-01-14 18:26:21 | 2025-01-14 18:26:21 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 50000 + 5;
int qry[MAX_N];
char mark[MAX_N];
int pri[MAX_N], num[MAX_N], K[MAX_N], prod[MAX_N], cur[MAX_N], inv[MAX_N], pc;
char np[MAX_N];
vector <pair <int, int>> ans[MAX_N];
int exgcd(int a, int b, int &x, int &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
} else {
int d = exgcd(b, a % b, y, x);
y -= a / b * x;
return d;
}
}
int main() {
int T;
scanf("%d", &T);
for (int i = 1; i <= T; i ++) {
scanf("%d", qry + i);
mark[qry[i]] = i;
}
int N = 50000;
for (int i = 2; i <= N; i ++) {
if (!np[i]) {
pri[++ pc] = i;
num[pc] = cur[pc] = i;
while (1ll * num[pc] * i <= N) {
num[pc] *= i;
}
prod[pc] = 1;
for (int j = 1; j < pc; j ++) {
prod[j] = 1ll * prod[j] * i % num[j];
prod[pc] = 1ll * prod[pc] * cur[j] % num[pc];
}
}
for (int j = 1; j <= pc && i * pri[j] <= N; j ++) {
np[i * pri[j]] = 1;
if (i % pri[j] == 0) break;
}
for (int j = 1; j <= pc; j ++) {
if (1ll * pri[j] * cur[j] <= i) {
cur[j] *= pri[j];
for (int k = 1; k <= pc; k ++) {
if (k != j) prod[k] = 1ll * prod[k] * pri[j] % num[k];
}
}
}
if (mark[i]) {
for (int j = 1; j <= pc; j ++) {
// fprintf(stderr, "j = %d, p = %d, prod = %d\n", j, pri[j], prod[j]);
int a = prod[j] % cur[j], b = cur[j], x, y;
assert(exgcd(a, b, x, y) == 1);
if (x < 0) x += b;
ans[i].emplace_back(x, b);
}
}
}
for (int i = 1; i <= T; i ++) {
if (qry[i] == 1) {
printf("1/1\n");
continue;
}else if (qry[i] == 2) {
printf("1/2\n");
continue;
}
double sum = 0;
bool flag = false;
for (auto [a, b] : ans[qry[i]]) {
sum += (double)a / b;
if (flag) {
putchar('+');
}else {
flag = true;
}
printf("%d/%d", a, b);
}
printf("-%d/1\n", (int)floor(sum));
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 187ms
memory: 3840kb
input:
2 3 6
output:
1/2+2/3-1/1 3/4+2/3+3/5-2/1
result:
ok OK, t = 2
Test #2:
score: 0
Accepted
time: 187ms
memory: 5964kb
input:
1 1
output:
1/1
result:
ok OK, t = 1
Test #3:
score: 0
Accepted
time: 188ms
memory: 3968kb
input:
10 1 2 3 4 5 6 7 8 9 10
output:
1/1 1/2 1/2+2/3-1/1 3/4+1/3-1/1 3/4+2/3+3/5-2/1 3/4+2/3+3/5-2/1 1/4+2/3+4/5+2/7-2/1 1/8+1/3+2/5+1/7-1/1 3/8+1/9+4/5+5/7-2/1 3/8+1/9+4/5+5/7-2/1
result:
ok OK, t = 10
Test #4:
score: -100
Wrong Answer
time: 188ms
memory: 3968kb
input:
54 7 20 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 3 47 81
output:
1/4+2/3+4/5+2/7-2/1 15/16+5/9+3/5+2/7+9/11+4/13+12/17+15/19-5/1 1/2 1/2+2/3-1/1 3/4+1/3-1/1 3/4+2/3+3/5-2/1 3/4+2/3+3/5-2/1 1/4+2/3+4/5+2/7-2/1 1/8+1/3+2/5+1/7-1/1 3/8+1/9+4/5+5/7-2/1 3/8+1/9+4/5+5/7-2/1 1/8+5/9+4/5+3/7+1/11-2/1 1/8+5/9+4/5+3/7+1/11-2/1 5/8+8/9+3/5+4/7+6/11+10/13-4/1 5/8+8/9+3/5+4/7...
result:
wrong answer Sums do not match for modulus 8809877585262195773