栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 1869 Snakes

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 1869 Snakes

#include <cmath>#include <cstdio>using namespace std;inline double sqr(const double x){    return x * x;}double x[1001], y[1001], r[1001];bool mp[1024][1024];void bfs(int n, int s){    static bool m[1024];    static int p, t, q[1024];    for (int i = 0; i < n; i++)        m[i] = false;    m[s] = true;    q[0] = s;    p = 0;    t = 1;    while(p < t) {        for (int i = 0; i < n; i++) if(!m[i] && mp[q[p]][i]) {     m[i] = true;     q[t++] = i; }        ++p;    }    for (int i = 0; i < n; i++)        if(m[i]) mp[s][i] = mp[i][s] = true;}int main(void){    int n;    double a, b;    while(scanf("%d", &n) != EOF) {        for (int i = 0; i <= n + 1; i++) for (int j = 0; j <= n + 1; j++)     mp[i][j] = false;        for (int i = 0; i < n; i++) { scanf("%lf%lf%lf", &x[i], &y[i], &r[i]); if(y[i] - r[i] < 0)     mp[i][n] = mp[n][i] = true; if(y[i] + r[i] > 1000)     mp[i][n + 1] = mp[n + 1][i] = true; for (int j = 0; j < i; j++)     if (sqr(x[i] - x[j]) + sqr(y[i] - y[j]) < sqr(r[i] + r[j]))         mp[i][j] = mp[j][i] = true;        }        if(mp[n][n + 1]) { printf("Bill will be bitten.n"); continue;        }        bfs(n + 2, n + 1);         if(mp[n][n + 1]) { printf("Bill will be bitten.n"); continue;         }        a = b = 1000.0;        for (int i = 0; i < n; i++) { if(!mp[i][n + 1])     continue; if(x[i] - r[i] < 0) {     a = a < y[i] - sqrt(sqr(r[i]) - sqr(x[i])) ? a : y[i] - sqrt(sqr(r[i]) - sqr(x[i])); } if(x[i] + r[i] > 1000) {     b = b < y[i] - sqrt(sqr(r[i]) - sqr(1000 - x[i])) ? b : y[i] - sqrt(sqr(r[i]) - sqr(1000 - x[i])); }        }        printf("Bill enters at (0.00, %.2lf) and leaves at (1000.00, %.2lf).n", a, b);    }}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372201.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号