• NOIP 2017 奶酪


    题目链接

    https://www.luogu.org/problemnew/show/P3958

    去年貌似只拿了30分

    现在24分钟AC掉了

    还是有进步的

    注意在考场上自己出一些特殊的数据来测

    比如这道题在一个球同时切上下的时候我的程序就有bug

    WA了一次

    #include<bits/stdc++.h>
    #define REP(i, a, b) for(register int i = (a); i < (b); i++)
    #define _for(i, a, b) for(register int i = (a); i <= (b); i++)
    using namespace std;
    
    typedef long long ll;
    const int MAXN = 1e3 + 10;
    struct node
    {
        ll x, y, z;
        int p;
        void read() { scanf("%lld%lld%lld", &x, &y, &z); }
    }a[MAXN];
    int n, vis[MAXN];
    int h, r;
    vector<int> g[MAXN];
    
    inline bool judge(int i, int j)
    {
        return 2.0 * r >= sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y)+(a[i].z-a[j].z)*(a[i].z-a[j].z));
    }
    
    void dfs(int u)
    {
        vis[u] = 1;
        REP(i, 0, g[u].size())
        {
            int v = g[u][i];
            if(!vis[v]) dfs(v);
        }
    }
    
    int main()
    {
        int T; 
        scanf("%d", &T);
        
        while(T--)
        {
            bool ok = false;
            scanf("%d%d%d", &n, &h, &r);
            _for(i, 1, n) 
            {
                a[i].read();
                a[i].p = 0;
                if(a[i].z - r <= 0) a[i].p = 1;
                if(a[i].z + r >= h) 
                {
                    if(a[i].p) ok = true;
                    a[i].p = 2;
                }
                g[i].clear();
            }
            
            if(ok) { puts("Yes"); continue; }
            
            _for(i, 1, n)
                _for(j, 1, n)
                    if(judge(i, j))
                    {
                        g[i].push_back(j);
                        g[j].push_back(i);
                    }
            
            memset(vis, 0, sizeof(vis));        
            _for(i, 1, n)
                if(!vis[i] && a[i].p == 1)
                    dfs(i);
            
            _for(i, 1, n)
            {
                if(a[i].p == 2 && vis[i]) { puts("Yes"); break; };
                if(i == n) puts("No");
            }
        }
        
        return 0;
    }
  • 相关阅读:
    正则表达式入门
    Tyvj 1518 CPU监控——极恶线段树
    数据结构-元组
    洛谷P3195 玩具装箱TOY
    数据结构-列表基本语法
    P2569 股票交易
    列表循环
    P3507 GRA-The Minima Game
    数据结构-集合
    洛谷P1595 信封问题
  • 原文地址:https://www.cnblogs.com/sugewud/p/9880877.html
Copyright © 2020-2023  润新知