前言
這**是模擬賽這就是爆〇賽
每道題都有思路(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=
1na
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...