數模組訓練題

2021-09-28 18:46:29 字數 1930 閱讀 9647

題意 : 給定n個點,求兩個點間最小距離;n <= 10000;

n ^ 2 是肯定過不了的,考慮分治;

1、將集合一分為二,求左半邊最小距離,右半邊最小距離,返回兩者較小值;

2、以較小值為半徑,以中心點為圓心畫圓,尋找左右兩邊在圓內的點,暴力求距離然後更新答案。

很巧妙,很經典;

#include#include#include#include#includeusing namespace std;

const int maxn = 10000 + 5;

int n;

struct hh a[maxn];

double calc(hh a,hh b)

bool cmp(hh a,hh b)

double d(int l,int r)

ans = min(d(l , mid),d(mid + 1 , r));

int l0 = mid - 1, r0 = mid + 1;

while(a[l0].x - a[mid].x < ans && l0 >= l) l0 --;

while(a[r0].x - a[mid].x < ans && r0 <= r) r0 ++;

for(int i = l0 + 1;i <= r0 - 1 ;i ++)

for(int j = i + 1;j <= r0 - 1;j ++)

ans = min(ans ,calc(a[i] ,a[j]));

return ans;

}void solve()

int main()

這個部落格講的很清晰。

先考慮直線分割,發現f(n) = f(n - 1) + n,再考慮將直線變成折線。

直線變成折線時,如圖;

因此 f(n) = f(2 * n)  - 2 * n;

然後化簡為 n * n * 2 - (n - 1)

平面分割問題

#include#include#include#includeusing namespace std;

int n,t;

int main()

}

錯排:n個人寫了n封信送給其他人,問有多少種贈送方案(即每個人不能把信給自己)

錯排公式為 f(n) = (n - 1)[f(n - 1) + f(n - 2)]

f(1) = 0, f(2) = 1;

第k個人贈送方案為(n - 1)種,假設他給了第m個人;

分兩種情況:

1、第m個人把信給了第k個,則此時方案數為f(n - 2);

2、第m個人沒有把信給第k個人,則相當於m是k(m不能給k,k不能給k,兩者等價),則此時方案數為f(n - 1);

#include#include#include#includeusing namespace std;

long long a[25];

long long t,n,m;

long long c(long long x,long long y)

void solve()

}int main()

漢諾塔

遞推公式為 f(n) = 2 ^ n - 1;

#include#include#include#include#includeusing namespace std;

typedef long long ll;

ll n,k,t;

int main()

}

函式模組和類模組oj題(D)

組合語言 函式模板用來幹嘛?就是為了解決乙個函式可以對不同型別的引數進行處理 函式業務邏輯一樣,但是函式引數型別不一樣,也就是乙個通用函式。函式模組 如 1.定義乙個函式模板,能完成兩個相同型別資料比較。比較結果分別是 1,0,1。當第乙個資料小於第二個資料時,返回 1。當第乙個資料等於第二個資料時...

函式模組 POPUP TO DECIDE

函式模組 popup to decide list 這個函式模組可以彈出乙個視窗,根據使用者傳入顯示若干個單 多選按鈕,並將使用者選擇返回。popup to decide list dialog box for choosing from a list without diagnosis 輸入引數如...

8 函式 模組

def functionname parameters 函式 文件字串 function suite return expression python 函式的引數傳遞 引數 匿名函式 python 使用 lambda 來建立匿名函式。全域性變數和區域性變數 定義在函式內部的變數擁有乙個區域性作用域,...