2018.10.09 NOIP訓練 蛋糕(數學)
阿新 • • 發佈:2018-12-14
描述
今天是鮑勃的生日,愛麗絲打算做一個蛋糕送給他。 這是鮑勃的 n 歲生日,所以愛麗絲的蛋糕必須是正 n 邊形。而且,鮑勃很喜 歡數字 m,所以這個蛋糕必須放在一個正 m 邊形的盒子裡。為了讓氣氛更加浪漫, 愛麗絲將在蛋糕的中心插上一根蠟燭,顯然,蠟燭既在蛋糕的中心,又在盒子的 中心是最好的。 換句話說,愛麗絲應該使正 n 邊形的蛋糕能被容納在正 m 邊形的盒子裡,且 使其中心重合。事實上,愛麗絲已經做好了蛋糕,蛋糕是邊長為 1 的正 n 邊形, 現在她想知道,正 m 邊形盒子的最小邊長是多少。
輸入
每組測試資料包含多行,以 EOF 作為檔案結束,每行包括兩個正整數 n 和 m
輸出
輸出包含多行,每行包含一個整數,代表最小的符合條件的正 m 邊形盒子的 邊長,保留 4 位小數。
樣例輸入
【樣例輸入 1】 4 8 【樣例輸出 1】 0.5412 【樣例輸入 2】 8 4 【樣例輸出 2】 2.4142
樣例輸出
提示
對於 20%的資料,n,m≤100; 對於 40%的資料,n,m≤10000; 對於 60%的資料,n,m≤1000000; 對於 80%的資料,n,m≤100000000; 對於 100%的資料,n,m≤1000000000。
標籤
UESTCSpring科學營
數學推導。 本蒟蒻首先花了40min推了一個80的錯誤結論。 看了程式碼之後改對了。 實際上: 注意開 程式碼:
#include<bits/stdc++.h>
#define ld long double
#define ll long long
using namespace std;
ld n,m;
ld pi=acos(-1.0);
inline ld lcm(ld a,ld b){return (ld)a*b/__gcd((ll)a,(ll)b);}
int main(){
while(~scanf("%Lf%Lf",&n,&m) )printf("%.4Lf\n",cos(pi/(ld)lcm(n,m))/sin(pi/n)*tan(pi/m));
return 0;
}