GDOI2004 可憐的綿羊

2021-07-15 07:07:41 字數 1040 閱讀 4989

給出乙個凸包,讓你求乙個不包含一些點的新凸包,用原來凸包上的點。新的凸包可以割成若干個三角形,三角形內部一定不包含那些點,所以外部的點一定等於總點數。我們可以求出一條線一邊所含點的個數,可是這有交集。考慮到新凸包上的點是原凸包的子集,交集一定在原凸包外。我們就可以n^2預處理出那些點在凸包內,n^3處理處一條線一邊的點數,再n^3dp。判斷點可以使用叉積,求出相對方向即可判斷是否在凸包內和在一條線的哪邊,列舉起點,f[i]表示到i的最優答案,列舉j下乙個選誰,轉移即可。

#include

#include

#include

#include

#include

#define ll long long

#define fo(i,j,k) for(int i=j;i<=k;i++)

#define fd(i,j,k) for(int i=j;i>=k;i--)

using namespace std;

int const maxn=100,maxm=400;

ll n,m,x[maxn+10],y[maxn+10],p[maxm+10],q[maxm+10],cnt[maxn+10][maxn+10],cntt[maxn+10][maxn+10];

bool in[maxm+10];

ll f[maxn+10];

ll count(ll x,ll y,ll xx,ll yy)

int main()

pon+=in[i];

}fo(i,1,n)

fo(j,1,n)

if(i!=j)

fo(k,1,m)

if(in[k])

cnt[i][j]+=(count(x[j]-x[i],y[j]-y[i],p[k]-x[i],q[k]-y[i])<=0);

ll ans=0;

fo(i,1,n-2)

if(ans==0)printf("die");

else printf("%.2lf",ans/2.0);

return 0;

}

GDOI模擬 排列

給你m個對1到n的排列的特徵,特徵有兩種 1 x y v 排列的第x個數到第y個數之間的最大值為v 2 x y v 排列的第x個數到第y個數之間的最小值為v 要求你還原出這個排列。刷水有益身心健康。既然是求方案,資料範圍又很小,那麼明顯的要用把點向權值連邊。然後他每次給出範圍之後再進行刪邊。最後,二...

GDOI模擬8 21總結

今天做了cqoi2013的題。第一次5個小時做5道題 先看了半小時的題。t5是初中做過的原題,記得是處理出上下界然後暴力列舉就行了,就先打了t5,花了乙個小時搞定了t5,過了樣例和自己出的幾個資料就沒管了 沒對拍是因為我覺得資料生成器有點難搞 然後這題做法本來就是暴力 然後去看了下之前沒怎麼看懂題的...

GDOI模擬2015 08 18 解密

給定一篇由若干個單詞構成的原文,還有乙個由若干個單詞組成的句子。加密文是由原文單詞通過某個單詞 可能一樣 替換而成的,原文相同單詞一定會被相同加密文單詞替換。沒有兩個不同的原文單詞被同乙個加密文單詞替換。要求找出句子在加密文中第一次出現的位置。原文本元總和不超過 1000000 句子字元總和不超過 ...