立体几何分类讨论很细节 Gym - 101967I Путешествие по тору

Posted suut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了立体几何分类讨论很细节 Gym - 101967I Путешествие по тору相关的知识,希望对你有一定的参考价值。

http://codeforces.com/gym/101967/attachments

题意:定义了一个甜甜圈。(torus)

技术分享图片

 

不是让你二重积分啦233

现在有一个星球是甜甜圈形状的,它有四条很关键的纬线,南极北极里赤道外赤道。同时有n条均匀分布的经线。每一圈经线和四条和纬线交出四个点。现在你从内赤道的某圈经线上出发,沿着经纬线访问所有的经线,访问的意思是:对于每个经线,至少走过其与两条纬线的交点。

题解:照着样例摸一下,不用算法,只是很细节。

 

#include <iostream>
#include <vector>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include<cstdio>
#include<vector>
#include<ctime>
#include<string>
#define rep(i,t,n)  for(int i =(t);i<=(n);++i)
#define per(i,n,t)  for(int i =(n);i>=(t);--i)
#define mmm(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);

int main()
{
    double r, R;
    int n;
    scanf("%lf%lf%d", &r, &R, &n);
    int N = n;
    double inner =  PI * 2 *(R-r)/n;
    double onner =  PI * 2 *(R)/n;
    double lesser = PI * 2 * r/4;
    double ans = 0;
    if (N == 1) {
        printf("%.15lf
",lesser);
        return 0;
    }

    if (lesser*4+inner*2 < lesser*2+onner+inner) {
        ans = lesser*2;
        ans += (N-1)*(lesser*2+inner);
        ans -= lesser;
    }
    else {
        if (N&1==1) {
            int t = N-3;
            ans = lesser*3+onner+inner;
            ans += (t/2)*(lesser*2+inner+onner);
        }else {
            int t = N-2;
            ans = min(lesser*2+onner,lesser*3+inner);
            ans += (t/2)*(lesser*2+inner+onner);
        }
    }
    printf("%.15lf
", ans);
}

 

以上是关于立体几何分类讨论很细节 Gym - 101967I Путешествие по тору的主要内容,如果未能解决你的问题,请参考以下文章

dp+分类讨论 Gym 101128E

Gym 101464C - 计算几何+二分(uva1463)

[GYM101173K] CERC 16 C.Convex Contour 计算几何

Gym - 101845D 计算几何

MT117立体几何里的一道分类讨论题

Rasheda And The Zeriba Gym - 100283A ? 计算几何