atcoder 082 E 暴力 計算幾何

2022-05-20 10:39:54 字數 2314 閱讀 5712

給出點集,然後求乙個凸包的所有的子凸包的貢獻總和,貢獻計算是凸包內部含邊界上點的數量n,凸包的不包含邊界的頂點數s,貢獻為$2^$

首先很容易想到,凸包上包含內部的所有點構成的子凸包有sum(i = 3 ->n)c(i,n)種情況,這個式子其實就是二項式的一部分。但是有可能出現多點共線的不合法情況,所以問題轉換為求所有點構成的直線中,每條直線上大於2點的點的數目,每條直線都要分別計算,最後減去就行了。求共線可以用叉積可以用斜率,注意判重。

這場比賽遲了10分鐘才寫,這題開始還在用凸包搞,簡直蠢(

/** @date    : 2017-09-02 20:30:47

* @filename: c.cpp

* @platform: windows

* @author : lweleth ([email protected])

* @link :

* @version : $id$

*/#include #define ll long long

#define pii pair#define mp(x, y) make_pair((x),(y))

#define fi first

#define se second

#define pb(x) push_back((x))

#define mmg(x) memset((x), -1,sizeof(x))

#define mmf(x) memset((x),0,sizeof(x))

#define mmi(x) memset((x), inf, sizeof(x))

using namespace std;

const int inf = 0x3f3f3f3f;

const int n = 210;

const double eps = 1e-6;

const ll mod = 998244353;

ll fa[210], inv[210];

ll fpow(ll a, ll n)

return r;

}void init()

}ll c(ll n, ll m)

struct point

point(double _x, double _y)

point operator -(const point &b) const

double operator *(const point &b) const

double operator ^(const point &b) const

bool operator == (const point &b) const

};double xmult(point p1, point p2, point p0)

double distc(point a, point b)

int sign(double x)

struct line

line(point ss, point tt)

};////////

int n;

point stk[n];

point p[n];

int cmpc(point a, point b)//水平序排序

int graham()//水平序

int tmp = top;

for(int i = n - 2; i >= 0; i--)

if(n > 1)

top--;

return top;

}ll check(int m)

if(c > 2)

t = (t + fpow(2, c) - (1ll + c + c * (c - 1) / 2ll) + mod) % mod;

return t;

}/////////

int main()

ll ans = 0;

ll cnt = graham();

//cout << cnt;

//ans = (fpow(2, n) - check(cnt) - (1ll + n + (n - 1) * n / 2ll) + mod) % mod;

ans = (fpow(2, n) - (1ll + n) + mod) % mod;

for(int i = 0; i < n; i++)

for(auto j : q)

}while(ans < 0)

ans += mod;

if(cnt > 2)

printf("%lld\n", ans);

else printf("0\n");

} return 0;

}

Java基礎08 2 繼承

概述 格式 繼承 demo1 定義乙個人類 class person public string getname public void setage int age public int getage 吃飯的方法 public void eat 睡覺的方法 public void sleep 學習...

AtCoder 2565(思維 暴力)

將乙個h w的矩形切成三份,每一次只能水平或者垂直切,問最大塊的面積 最小快的面積 的最小值是多少。先列舉水平切第一塊的高i,那麼剩餘部分h i要麼繼續水平切 要麼垂直切,因為要使最大快 最小快 最小,那麼剩下的兩塊肯定是相差最少為好,所以可以拆成w 2和w w 2兩塊,也可以拆成 h i 2和 h...

AtCoder 096 D 題解報告

已知乙個圓形櫃檯周長為c 你在x 0的位置,圓形櫃檯上存在n個點,每個點x i 上有能量為v i 的食物,並且你每走一步消耗1點能量 這裡自身能量可以為負 求你在這環形道路上走時,某一時刻自身擁有的最大能量是多少。因為是乙個環,我們可以正向走也可以反向走,同時還可以先正向走到某個點 i 再回到x 0...