社区讨论
90pts WA on #5 求调
P1298最接近的分数参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m2ylrljm
- 此快照首次捕获于
- 2024/11/01 18:39 去年
- 此快照最后确认于
- 2025/11/04 15:35 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
double r = 0.00000000000, d = DBL_MAX;
int m, n, p, q;
bool b = 0;
void yf(int x, int y)
{
int t = 2;
while (t <= min(x, y) / 2 && !(x%t) && !(y%t)) {
x /= t, y /= t;
if (x%t || y%t) ++t;
}
if (x == y) p = q = 1;
else p = x, q = y;
}
int yfp(int x, int y)
{
int t = 2;
while (t <= min(x, y) / 2 && !(x%t) && !(y%t)) {
x /= t, y /= t;
if (x%t || y%t) ++t;
}
if (x == y) return 1;
else return x;
}
int main()
{
freopen("P1298.txt", "r", stdin);
scanf("%d%d", &m, &n); scanf("%lf", &r);
for (int k = 1; k <= n; ++k) {
bool t = 1;
if (abs(-(double)(int)(k*r)/(double)k + r) < d && yfp((int)(k*r),k) <= m) {
d = abs(-((double)(int)(k*r)/(double)k - r));
yf((int)(k*r), k);
// p = (int)(k*r), q = k;
b = 0, t = 0;
// printf("%d %d\n", p, q);
}
if (abs((double)(int)(k*r+1)/(double)k - r) < d && yfp((int)(k*r+1),k) <= m) {
d = abs((double)(int)(k*r+1)/(double)k - r);
yf((int)(k*r+1), k);
// p = (int)(k*r+1), q = k;
b = 0, t = 0;
// printf("%d %d\n", p, q);
}
if (t && ((-(double)(int)(k*r)/(double)k + r - d <= 5e-17 && (double)(int)(k*r)/(double)k != (double)p/q && yfp((int)(k*r),k) <= m) ||
((double)(int)(k*r+1)/(double)k - r - d <= 5e-17 && (double)(int)(k*r+1)/(double)k != (double)p/q && yfp((int)(k*r+1),k) <= m))) b = 1;
}
if (b) printf("TOO MANY\n");
// else if (p == 0) printf("0/1");
else printf("%d/%d\n", p, q);
// printf("%d/%d", p, q);
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...