1 条题解

  • 0
    @ 2025-10-22 17:49:29

    题解

    题目分析

    这是一道算法题目,需要根据具体题目要求进行求解。

    解题思路

    1. 问题分析

    • 仔细阅读题目描述,理解题目要求
    • 分析输入输出格式和约束条件
    • 确定需要使用的算法和数据结构

    2. 算法选择

    • 根据题目特点选择合适的算法
    • 考虑时间复杂度和空间复杂度
    • 确保算法能正确处理所有测试用例

    3. 实现要点

    • 注意边界条件的处理
    • 优化输入输出以提高效率
    • 确保代码的正确性和鲁棒性

    4. 调试和优化

    • 使用测试用例验证算法正确性
    • 分析性能瓶颈并进行优化
    • 确保代码能通过所有测试点

    注意事项

    • 仔细处理数据类型和精度问题
    • 注意数组越界和空指针问题
    • 确保算法的时间复杂度符合要求
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 1e3 + 5;
    
    int x[N], y[N], z[N], vis[N];
    int n, h, r;
    string ans;
    ll dis(int i, int j) {
        return 1LL * (x[i] - x[j]) * (x[i] - x[j]) + 1LL * (y[i] - y[j]) * (y[i] - y[j]) + 1LL * (z[i] - z[j]) * (z[i] - z[j]);
    }
    
    void dfs(int u) {
        vis[u] = 1;
        if (ans == "Yes") return;
        if (z[u] >= h - r) {
            ans = "Yes";
            return;
        }
        for (int i = 1; i <= n; i++) {
            if (!vis[i] && dis(u, i) <= 4LL * r * r) {
                dfs(i);
            }
        }
    }
    
    void solve() {
        ans = "No";
        cin >> n >> h >> r;
        memset(vis, 0, sizeof(vis));
        for (int i = 1; i <= n; i++) {
            cin >> x[i] >> y[i] >> z[i];
        }
    
        for (int i = 1; i <= n; i++) {
            if (!vis[i] && z[i] <= r) {  // 和地面相交
                dfs(i);
            }
        }
    
        cout << ans << endl;
        return;
    }
    
    int main() {
        ios::sync_with_stdio(false), cin.tie(0);
        int t;
        cin >> t;
        while (t--) {
            solve();
        }    
        return 0;
    }
    
    • 1

    信息

    ID
    3760
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者