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

zoj 1299 Pendulum

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

zoj 1299 Pendulum

#include <cstdlib> #include <algorithm> #include <cstdlib> #include <cmath>#include <cstdlib> #include <algorithm> #include <cstdlib> #include <cstdio>const double EPS = 1e-4;const int MAXN = 512;inline bool lt(double a, double b) {    return a < b - EPS;}inline bool gt(double a, double b) {    return a > b + EPS;}inline bool eq(double a, double b) {    return fabs(a - b) < EPS;}int main() {    int ri = 0, n, p, q;    bool flag;    double t, r, dr, tr, alpha, beta, gamma;    double x[MAXN], y[MAXN];    while (scanf("%d%lf", &n, &r) != EOF && r > 0) {        x[0] = y[0] = 0;        p = 0;        alpha = -M_PI;        for (int i = 1; i <= n; ++i) { scanf("%lf%lf", &x[i], &y[i]);        }        t = 0;        while (true) { q = -1; for (int i = 1; i <= n; ++i) {     if (i == p) {         continue;     }     tr = hypot(y[i] - y[p], x[i] - x[p]);     gamma = atan2(y[i] - y[p], x[i] - x[p]);     if (!lt(tr, r)) {         continue;     }     flag = false;     if (q == -1) {         flag = true;        } else if (eq(gamma, beta)) {         flag = gt(tr, dr);     } else if (lt(gamma, alpha)) {         flag = lt(beta, alpha) && lt(gamma, beta);     } else if (gt(gamma, alpha)) {         flag = lt(beta, alpha) || lt(gamma, beta);     }     if (flag) {         q = i;         dr = tr;         beta = gamma;     } } flag = false; if (gt(y[p] + r, 0)) {      gamma = asin(-y[p] / r);     if (q == -1 ||         (lt(alpha, gamma) && lt(gamma, beta)) ||         (gt(alpha, beta) && (gt(gamma, alpha) || lt(gamma, beta)))) {         q = -1;         beta = gamma;         flag = true;     } } if (q != -1 || flag) {     if (lt(alpha, beta)) {         t += r * (beta - alpha);     } else if (lt(beta, alpha)) {t += r * (beta - alpha + 2 * M_PI);     } else {     } } if (q != -1) {     p = q;     r -= dr;     alpha = beta;     continue; } printf("Pendulum #%dnLength of periodic orbit = ", ++ri); printf("%.2lfnn", flag ? 2 * t : 2 * M_PI * r); break;        }    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/377715.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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