sjtu1333 函式時代

2022-07-22 06:39:08 字數 1164 閱讀 3676

taring說:生活的過程就是執行函式的過程。需要命令,也需要回報。更重要的,是得到回報的過程。

好吧。。。這道題其實和上面的也沒啥關係tat,我們要求的是下面的問題:

給定\(n\)個數,第\(i\)個數為\(a[i]\)。再給定乙個常數h。現在,你要把這\(n\)個數,分成兩個集合,且這兩個集合的並集為這\(n\)個數的全集;這兩個集合的交集為空集。然後我們對於任意的兩個數\(a[i],a[j]\),做乙個函式\(f(a[i], a[j])\) ,此函式滿足:

若\(a[i]\)和\(a[j]\)在同乙個集合,那麼\(f(a[i], a[j]) = a[i] + a[j]\);

若a[i]和\(a[j]\)在不同集合,那麼\(f(a[i], a[j]) = a[i] + a[j] + h\)

現在taring要使得所有這些函式的最大值和最小值的差最小,請求出這個最小差。

第一行有兩個數字,\(n\)和\(h\)。

第二行有n個數字,第i個資料為a[i]。

有且只有乙個整數,為題目要求所求的最小差。

3 2

1 2 3

對於30%的資料,\(n \le 1000\)。

對於100%的資料,\(n<=100000,h,a[i]<=10^8\)

這題寫了個奇怪的演算法。我想肯定有某種分法使得最優解涵蓋在裡面。

我是這樣做的。將\(a\)排序。開始時把所有元素都放入乙個集合中,然後把依次\(a[i]\)放入另乙個集合中,邊放邊維護答案就可以了。

如何證明腦補一下就行了吧(大概是讓最小值變大)。

#include#include#include#includeusing namespace std;

#define maxn (100010)

int n,h,a[maxn],ans;

int main()

printf("%d",ans);

fclose(stdin); fclose(stdout);

return 0;

}

python定義函式時的引數 呼叫函式時的傳參

一 定義函式 1 位置引數 直接定義引數 2 預設引數 或者關鍵字引數 引數名 預設值 3 位置引數必須在預設引數之前 二 呼叫函式 1 按位置傳,直接寫引數的值 2 按關鍵字傳,關鍵字 值 3 位置引數必須在關鍵字引數之前 4 關鍵字引數可在 args和 kwargs之前 注 呼叫時,無論定義的函...

函式return時崩潰

環境,xp sp3,vc6 乙個函式,裡面用了std string,char 調了乙個dll裡的函式,在結尾處return時崩潰,崩潰原因是堆疊什麼什麼的,忘了抓圖 堆疊顯示崩潰的位置在stlport的dll裡面,看了一下和stlport有關的只有string,使用沒問題,析構應該不會出問題,然後登...

switf kvc 建構函式時

switf4 時 需要加入 objc dynamic var name string?基本函式型別時 不可以設定可選型別 必須賦初始值 給基本資料型別屬性初始化 使用kvc會提示無法找到age 的 key 原因 int 是乙個基本資料型別的結構體,oc中沒有,oc 中只有基本資料型別 dynamic...