省選專練JSOI2007合金

2021-08-20 07:05:04 字數 1202 閱讀 1503

這個是真的想不到啊

第一你搞三維的沒意義

於是乎,把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就可以,不需...