校內模擬 19 07 25 中位數 結論

2021-09-25 13:47:45 字數 1471 閱讀 7929

前言

這**是模擬賽這就是爆〇賽

每道題都有思路(x)

每道題都只能暴力()

題面給你乙個長度為 的正整數序列 ,它包含2n−

12^n-1

2n−1

個非空子序列,注意到2n−

12^n-1

2n−1

是乙個奇數。

我們定義乙個子串行的權值為子串行內所有元素權值之和。

求所有非空子序列的權值的中位數。

n<=2000,ai<=2000

題解暴力想法:

算出每個子串行的權值取中位數

期望得分10pts左右?

我的想法:

考慮到每加入乙個數,新增的子串行權值就是原來的所有加上這個數,然後再把這個數丟進去,模擬一下即可。

期望得分???

正解想法:

如果我們把空集也算為子串行,那麼對於每乙個權值為k的子串行,一定有乙個權值為∑i=

1nai

\sum_^n ai

∑i=1n​

ai− k-k

−k,也就是說,現在所有的子串行的權值關於12∑

i=1n

ai

\frac \sum_^n ai

21​∑i=

1n​a

i 對稱。

由於我們不考慮空集,所以我們要找的就是比那個對稱軸(懶得打了)剛好大一點點的值

然後因為直接算不太方便,再加上這個優秀的資料範圍,我們就考慮dp一下,設計dp[

i][j

]dp[i][j]

dp[i][

j]為前i個數能否湊出j

jj,轉移很顯然就不說了。

為了避免空間**我們就用bitset,時間複雜度為o(n

∗sum

64)

o(\frac)

o(64n∗

sum​

),據說常數很小所以隨便過。

#include

#define rint register int

#define ivoid ilnine void

#define iint inline int

#define endll '\n'

#define ll long long

using

namespace std;

int n;

int a[

2005

],sum;

bitset<

2000010

> f;

iint rad()

while

(c>=

'0'&&c<=

'9')x=

(x<<3)

+(x<<1)

+c-'0'

,c=getchar()

;return x*f;

}signed

main()

}

校內模擬 Polygon(結論)(樹形DP)

簡要題意 給你乙個凸多邊形,並且給你乙個三角剖分,請你找乙個以這個凸多邊形頂點為頂點的三角形,使得在給出的三角剖分中,被你找的三角形覆蓋的三角形盡可能多。這裡並不要求完全覆蓋,只要交的面積不為0即可。由於資料範圍不大 出題人懶得寫資料生成器造不了強的資料 考場上寫的o n 2log n o n 2 ...

校內模擬 YL杯超級籃球賽(中位數)

不知道loli從 搞的題目系列。yl是啥意思啊 簡單來講它選擇的座標就是橫縱座標的帶權中位數。atp記得當時考試的時候並不會帶權中位數所以。對於這道題,它的移動代價的計算方式是曼哈頓距離,所以可以把橫縱座標分開考慮,將二維問題轉化成一維問題。首先我們可以證明選擇的點的座標一定是出現過的座標之一。因為...

題目1157 中位數

題目描述 中位數定義 一組資料按從小到大的順序依次排列,處在中間位置的乙個數 或最中間兩個資料的平均數 給出一組無序整數,求出中位數,如果求最中間兩個數的平均數,向下取整即可 不需要使用浮點數 輸入 該程式包含多組測試資料,每一組測試資料的第一行為n,代表該組測試資料報含的資料個數,1 n 1000...