社区讨论

P9830为什么过不去啊啊啊啊

题目总版参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhj0w41c
此快照首次捕获于
2025/11/03 18:54
4 个月前
此快照最后确认于
2025/11/03 18:54
4 个月前
查看原帖
我就奇怪了样例都能过为什么题目过不去啊aP9830不就是个贪心吗求大佬解答
CPP
#include <bits/stdc++.h>
using namespace std;
const int INF = 10000001;
int t;
int gcd(int x, int y) {
  if(x == 0 && y == 0) {
    return 0;
  } else if(y == 0) {
    return x;
  } else if(x == 0) {
    return y;
  }
  return gcd(y, x % y);
}
int main() {
  cin >> t;
  while(t--) {
    int n, m, a[201][201];
    cin >> n >> m;
    if(gcd(n, m) == 1) {
      double ans = sqrt((double)(n * n + m * m));
      printf("%.15lf\n", ans);
    } else {
      double ans = INF;
      for(int i = max(0, n/2 - 100); i <= min(n, n/2 + 100); i++) {
        for(int j = max(0, m*i/n - 2); j <= min(m, m*i/n + 2); j++) {
          if(gcd(i, j) == 1 && gcd(n - i, m - j) == 1) {
            if(i * (m - j) != j * (n - i)) {
              ans = min(ans, sqrt((double)(i * i + j * j)) + sqrt((double)((n-i) * (n-i) + (m-j) * (m-j))));
            }
          }
        }
      }
      printf("%.15lf\n", ans);
    }
  }
  return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...