立体几何分类讨论很细节 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 Путешествие по тору的主要内容,如果未能解决你的问题,请参考以下文章
Gym 101464C - 计算几何+二分(uva1463)