zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Python综合学习 python入门学习 python速成
    博客建设
    文献搜索方法
    Mac效率工具集合
    Mac High Sierra 三步搞定安装Eclipes
    Mac High Sierra一步搞定Mysql安装
    Mac中使用的建模工具/流程图制作
    R语言的安装以及入门
    (一)linux基本的操作命令
    小程序canvas简单电子签名
  • 原文地址:https://www.cnblogs.com/sugewud/p/9880877.html
Copyright © 2011-2022 走看看