YbtOJ20029 最大權值

2022-02-14 05:23:03 字數 2343 閱讀 7315

作為今天膜你抄模擬賽上唯一切掉的題目,小w在此氵一篇題解。

比賽中的題目,題庫還沒有

有乙個長度為\(n\)的實數序列,下標從\(1\)開始,其中第\(k\)個位置的實數為\(p\cdot(sin(a\cdot k+b)+cos(c\cdot +d)+2)\),\(sin\)和\(cos\)採用弧度制,其中\(p,a,b,c,d\)均為給定的整數。

你需要從這個序列中選擇兩個位置(可以相同),使前邊的位置上的數字減去後邊的位置上的數字最大。

如果選擇了兩個相同的位置,那麼差為\(0\)。

從檔案weight.in中讀入資料。

一行六個整數\(p,a,b,c,d,n\)。

輸出到檔案weight.out中。

一行乙個實數表示最大的差值,保留六位小數。

小w破天荒地給了樣例。

100 432 406 867 60 1000
399.303813
對於\(30\%\)的資料,\(1\leq p,a,b,c,d\leq 1000\),\(1\leq n \leq 1000\);

對於\(100\%\)的資料,\(1\leq p,a,b,c,d\leq 1000\),\(1\leq n \leq 10^6\)。

這道題居然後\(sin\)和\(cos\)!小w哭了,於是試了試cmath

發現,果然有可以!

那我們就讀入,然後處理,最後sort一遍排個序,用最大值減去最小值就好了唄~

#include #include #include #include #include using namespace std;

#define maxn 1000007

double qwq[maxn] = ;

int p, a, b, c, d, n;

int main()

sort(qwq + 1, qwq + 1 + n);

printf("%0.6lf", qwq[n] - qwq[1]);

fclose(stdin);

fclose(stdout);

return 0;

}

複雜度\(o(nlogn)\)

一切看起來都是辣麼完美。

但是!但是

使前邊的位置上的數字減去後邊的位置上的數字最大

也就是說,順序並不能打亂!

也就是說,不能用sort

那麼,我們換個思路

我們先考慮打暴力,直接兩重迴圈列舉每兩個數的差然後取最大值。

#include #include #include #include #include using namespace std;

#define maxn 1000007

double qwq[maxn] = ;

int p, a, b, c, d, n;

int main()

double maxn = -maxn;

for (int i = 1; i <= n; i++)}}

printf("%0.6lf", maxn);

fclose(stdin);

fclose(stdout);

return 0;

}

這樣的話……複雜度\(o(n^2)\)

太慢了啊喂!

這時,小w靈機一動!我們可以直接把處理放到預處理中!

我們在預處理的迴圈中,找出目前最大值的下標,然後用目前最大值減去目前的值,若比之前最大值減目前的值大,就更新,最後輸出。

#include #include #include #include #include using namespace std;

#define maxn 1000007

double qwq[maxn] = ;

double maxn = -maxn;

int p, a, b, c, d, n, awa;

int main()

if (qwq[i] > qwq[awa])

}printf("%0.6lf", maxn);

fclose(stdin);

fclose(stdout);

return 0;

}

這樣,複雜度成功降到\(o(n)\)!

題解 · 完

YbtOJ 最大均值

因此,這個 text 就是所求的最大的平均值 將上個轉化來的問題繼續轉換 既然上個問題中是使平均值不小於 text 那麼如果將 a 序列的所有值都減去 text 那麼問題又變成了 是否存在乙個長度不小於 l 的子段,子段和非負 子段和可以通過字首和相減得到,即設 text i 為 a 1,a i 的...

最大權森林問題

題目大意 一共n個男的m個女的,要把它們都招募了,但是有r個男女組合親密度,這時候徵募費用就是10000 已經徵募的人和自己的親密度的最大值 求最小徵募費用 看到這題時我的第一反應畫了個二分圖 雖然我不會二分圖 然後連了r條線,啥都不會 後來看了大神題解,看完感覺思路是真的簡單 大神思路 不管男還是...

最大生成樹 最大權森林

題意 給定n個男生和m個女生的關係,各個關係具有一定的權值,然後要挑選出所有人,每個人的代價是10000,但挑選人的過程中這些權值就是可以用來減去費用,求cost的min include include include include using namespace std const int m ...