這個是真的想不到啊
第一你搞三維的沒意義
於是乎,把c看做1-a-b那麼c就沒有了意義,因為確定了a,b辣麼c自然確定下來
其次對於這個東西有著重要的引理:
對於二元笛卡爾基上的點(ax,ay)(bx,by)他們的連線就是可以配湊的情況
辣麼擴充套件到多個點進行配湊:由於可把這個線段上的每乙個點都看做一種新點,於是這些點的連線可以擴充套件
嗚呼,線的無限重疊就是面了啊!!!
顧:這實際是求多少個點構成的凸包可以包含乙個點集
那麼問題的本質是求最小環!!!
floyd就好了(或者說floyd本質是判斷有無環但對於此題,只要你不做倍增限制邊數那麼環就是最小的)
#include#include#include#include#includeusing namespace std;
const int n=501;
const double eps=1e-12;
const double inf=1e12;
int cmp(double a)
struct point
friend point operator + (point a,point b)
friend point operator - (point a,point b)
friend point operator * (point a,double k)
friend point operator / (point a,double k)
void read()
}a[n],b[n];
typedef point vector;
double dot(vector a,vector b)
double cross(vector a,vector b)
int m,n;
int mmp[n][n]={};
int main()
for(int i=1;i<=n;i++)
for(int i=1;i<=m;i++)
if(cmp(cross(vec1,vec2)==0)&&!((b[k].x<=max(a[i].x,a[j].x))&&(b[k].x>=min(a[i].x,a[j].x))&&(b[k].y<=max(a[i].y,a[j].y))&&(b[k].y>=min(a[i].y,a[j].y))))
}if(flag==1){
// cout<
省選專練SCOI2005掃雷
這是乙個智商檢測題 狀壓dp。如果你玩過掃雷,並且內心有一棵平衡樹 bb數 你就會發現答案只有0,1,2共計三種。於是法一 模擬。答案對不對只會取決於第乙個是什麼。模擬兩邊就好了。includeusing namespace std int i,j,k,m,n,ans 2,a 10001 b 100...
省選專練ZJOI2005午餐
這是個好題 考察dp優化,dp,貪心,01揹包變種。好首先對吃飯時間從大到小排序,因為一隊人打飯時長總和一樣。dp i,j 表示前i個人,第一組用j的時間。放第乙個揹包 dp i j min max dp i 1 j a i w j a i v 放第二個揹包 dp i j min max dp i ...
省選專練ZJOI2012旅遊
stl在開o2後自然是大水題。考點 樹的直徑。第一二次構圖。把每乙個三角塊相鄰的建邊。怎麼建?stl 你都做到這個題了map hash兩個值鐵定會吧。但是zjoi沒有那麼好心,不過你也有70分了。於是這樣 把兩點建邊。排個序。相同的時候連起來。樹的直徑。很多人求複雜了。樹的直徑一遍dfs就可以,不需...