胰芰 发表于 2025-6-9 16:40:34

题解:AT_abc389_d [ABC389D] Squares in Circle

假定原点为圆心。
我们只考虑点在第一象限的情况,剩下的情况同理。
因为圆心是原点,所以在圆内的点的横坐标一定在 \(r\) 之内。
枚举点的横坐标 \(x + \frac{1}{2}\),二分最大的 \(y + \frac{1}{2}\),使得点 \((x + \frac{1}{2}, y + \frac{1}{2})\) 到原点的距离 \(\le r\) (因为我们令圆心为原点,所以所有的点都应平移一段)。
此时所有横坐标为 \(x + \frac{1}{2}\) 的在圆内的点分别是:

\[(x + \frac{1}{2}, \frac{1}{2}),(x + \frac{1}{2}, 1 + \frac{1}{2}),(x + \frac{1}{2}, 2 + \frac{1}{2}),\dots,(x + \frac{1}{2}, y + \frac{1}{2})\]
一共是 \(y + 1\) 个。
将枚举的所有 \(x\) 算出来的答案加起来记为 \(t\)。
因为我们只考虑了第一象限,所以答案是 \(4 \times t + 1\)(需要考虑原点的情况,所以要 $ + 1$)。
#include <bits/stdc++.h>
#define int long long
#define pii pair<int, int>
#define FRE(x) freopen(x ".in", "r", stdin), freopen(x ".out", "w", stdout)
#define ALL(x) x.begin(), x.end()
using namespace std;

inline void cmax(int& x, int c) {
    x = max(x, c);
}
inline void cmin(int& x, int c) {
    x = min(x, c);
}

int _test_ = 1;

int n, ans;

double dis(double x, double y) {
    return (double)sqrt((double)((double)((double)x + 0.5) * (double)((double)x + 0.5) + (double)((double)y + 0.5) * (double)((double)y + 0.5)));
}

void init() {}

void clear() {}

void solve() {
    cin >> n;
    for (int i = 1; i < n; i++) {
      int l = 0, r = n, t = 0;
      while (l <= r) {
            int mid = (l + r) >> 1;
            if (dis(i, mid) <= (double)n) {
                t = mid;
                l = mid + 1;
            } else
                r = mid - 1;
      }
      ans += t + 1;
    }
    cout << ans * 4 + 1;
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    // cin >> _test_;
    init();
    while (_test_--) {
      clear();
      solve();
    }
    return 0;
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

嗳诿 发表于 2025-12-3 02:13:54

谢谢楼主提供!

锦惺 发表于 2025-12-3 19:34:00

这个好,看起来很实用

拼潦 发表于 2025-12-22 08:47:38

谢谢楼主提供!

抑卞枯 发表于 2025-12-31 14:06:40

喜欢鼓捣这些软件,现在用得少,谢谢分享!

老僻贞 发表于 2026-1-5 13:00:01

过来提前占个楼

祖柔惠 发表于 2026-1-14 08:20:03

鼓励转贴优秀软件安全工具和文档!

闵雇 发表于 2026-1-14 08:38:12

感谢分享,学习下。

博咱 发表于 2026-1-14 22:23:29

感谢分享

崔和美 发表于 2026-1-18 11:57:01

热心回复!

刘凤 发表于 2026-1-18 22:49:28

很好很强大我过来先占个楼 待编辑

丁若云 发表于 2026-1-21 11:34:19

收藏一下   不知道什么时候能用到

锦惺 发表于 2026-1-22 10:08:33

用心讨论,共获提升!

欤夤 发表于 2026-1-22 17:46:50

新版吗?好像是停更了吧。

米榜饴 发表于 2026-1-25 06:07:40

谢谢分享,辛苦了

祝娜娜 发表于 2026-1-26 08:31:42

热心回复!

兑谓 发表于 2026-1-27 04:44:34

懂技术并乐意极积无私分享的人越来越少。珍惜

釉她 发表于 2026-1-29 02:43:00

yyds。多谢分享

贺蛟亡 发表于 2026-1-29 05:18:30

感谢分享,下载保存了,貌似很强大

肿圬后 发表于 2026-2-3 02:49:01

感谢分享,学习下。
页: [1] 2
查看完整版本: 题解:AT_abc389_d [ABC389D] Squares in Circle