1. 程式人生 > >【立體幾何】分類討論很細節 Gym - 101967I Путешествие по тору

【立體幾何】分類討論很細節 Gym - 101967I Путешествие по тору

com memset tor png == 分享 space spa int

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\n",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\n", ans); }

【立體幾何】分類討論很細節 Gym - 101967I Путешествие по тору