這是一枚平凡的骰子。它是乙個均質凸多面體,表面有n個端點,有f個面,每一面是乙個凸多邊形,且任意兩面不共面。將這枚骰子拋向空中,骰子落地的時候不會發生二次彈跳(這是一種非常理想的情況)。你希望知道最終每一面著地的概率。
每一面著地的概率可以用如下的方法計算:我們假設o為骰子的重心,並以o為球心,做半徑為1的單位球面(記為s)。我們知道s的表面積即單位球的表面積,為4*pi,這裡pi為圓周率。對於骰子的某一面c來說,球面s上存在一塊區域t滿足:當下落時若骰子所受重力方向與s的交點落在t中,則c就是最終著地的一面。那麼c著地的概率為區域t的面積除以4*pi。
我們保證:每一面著地的時候,重心的垂心都恰好在這一面內。也就是說不會出現擺不穩的情況。
第一行輸入兩個整數,分別表示端點總數n與表面總數f,分別從1開始編號。
之後n行,每行有三個浮點數x,y和z,給出了每乙個端點的座標。之後f行依次描述了每一塊表面,首先給出不小於3的整數d,表示這一面的端點個數,之後d個整數按照逆時針方向(視角在骰子的外面)給出了每乙個端點的編號。
輸出f行,第i行有乙個浮點數,表示第i個面著地的概率。
本題中您的輸出應該保留距離答案最近的7位小數,即在需要保留7位小數的前提之下與標準答案最接近。資料保證可以避免對小數點後第八位四捨五入後產生的精度誤差。
8 6
1 0 0
1 1 0
1 0 1
1 1 1
0 0 0
0 1 0
0 0 1
0 1 1
4 1 2 4 3
4 2 6 8 4
4 6 5 7 8
4 5 1 3 7
4 3 4 8 7
4 1 5 6 2
copy
0.1666667
0.1666667
0.1666667
0.1666667
0.1666667
0.1666667
copy
首先存在20%的資料,骰子為長方體。
其次存在20%的資料,骰子為四面體。
餘下的資料中有30%的資料,每一面都是三角形。
對於100%的資料,4<=n<=100且4<=m<=100,所有座標的絕對值都在10000以內。
sdoi 2016 round2 day2
#include#includeusing
namespace
std;
inline
void read(int &x)
const
int n=105
;typedef
double
real;
const real pi=acos(-1
);struct
point
point(real _x,real _y,real _z):x(_x),y(_y),z(_z){}
point
operator +(const point &a)const
point
operator -(const point &a)const
point
operator ^(const point &a)const
real
operator *(const point &a)const
point
operator /(const real &a)const
const
real len()
}p[n],h[n*n];
intn,m,htot,f[n][n];
real val[n*n];
intmain()
}point u=p[1
];
for(int i=1;i<=m;i++)
}u=point(0,0,0
); real valtot=0
;
for(int i=1;i<=htot;i++)
u=u/valtot;//
球心座標
for(int i=1;i<=m;i++)
ans-=pi*(f[i][0]-2
); printf(
"%.7lf\n
",ans/4/pi);
}return
0;
}
SDOI2016 數字配對
傳送門 裸費用流。建邊 對於a i a j pr ime a j a i frac prime a j a i a j a i prim e a j a i 需要i ii向j n j nj n連,並且j jj向i n i ni n連。費用即為c i c j c i c j c i c j 流量無窮大...
SDOI2016 數字配對
點此看題 考慮這個條件ai是aj的倍數,且ai aj是乙個質數,滿足這個條件就必須要滿足下面兩個條件 第二個條件很重要,它告訴我們可以把數字的cnt cntcn t奇偶劃分,就能得到乙個二分圖,我們就可以想網路流的方面想,圖是這樣建的 然後我們在建好的圖上跑費用流,由於圖是二分圖,最長路一定是單調遞...
SDOI 2016 數字配對
戳一戳 感覺自己調了半天然後模板打錯了。好難過。rsduheiutfhnesrfnsjkenfkj 不bibi了我們講一下如何建圖。我們可以發現這2個數字之間的關係是雙向的。那我們怎麼辦呢 手動滑稽 這裡有乙個很神奇的結論 如果a為b的因數且b除以a的值為質數,那麼將a與b質因數分解後a與b的指數差...