滿分:300pt
s300pts
300pts
實際得分:180pt
s180pts
180pts
失誤:30pt
s30pts
30pt
s給定乙個正整數 s
ss,現在要求你選出若干個互不相同的正整數,使得它們的和不大於 s
ss,而且每個數的因數(不包括本身)之和最大。(s≤
1000
)(s\le1000)
(s≤100
0)預處理:每個數約數和sum
[i
]sum[i]
sum[i]
,時間複雜度o(s
2)
o(s^2)
o(s2)
法1:01揹包
for
(int i=
1;i<=n;i++
)}
答案:f[n
]f[n]
f[n]
法2:dfs+剪枝
void
dfs(
int nw,
int s,
int cnt)
}
答案:max
(f[i
]),i
∈[1,
n]
max(f[i]),i∈[1,n]
max(f[
i]),
i∈[1
,n]
死因sum[
1]=0
而並非1
sum[1]=0而並非1
sum[1]
=0而並
非1100pt
s⟶70p
ts
100pts\longrightarrow 70pts
100pts
⟶70p
ts給乙個長度為 n
nn 的陣列 a
aa,給定 l,r
l, r
l,r,求所有滿足長度大等於 l
ll,小等於 r
rr 的 a
aa 陣列的子區間的平均值的最大值。(n≤
105)
(n\le10^5)
(n≤105
) 做法:二分答案+單調佇列
二分平均值mid
midmi
d,將a
aa陣列每個數減去mid
midmi
d,再判斷是否有一段長度在[l,
r]
[l,r]
[l,r
]間的區間和大於0
00,用單調佇列判斷。
bool
check
(double x)
int head=
1,tail=0;
double ans=0;
for(
int i=
1;i<=n;i++)if
(i>=l)
q[++tail]
=i-l;
ans=
max(ans,sum[i]
-sum[q[head]])
;}}return ans>0;
}
給定m
mm條方向不確定的有向邊,讓你選出一些邊並確定它們的方向,使每個點的入度剛好為1
11,並使邊權之和最小。(m≤
5∗10
5)
(m\le5*10^5)
(m≤5∗1
05)
做法容易發現如果所有邊均為無向邊,那麼我們的圖將會由至少一顆基環樹組成。所以我們的目標就變為找最小的基環樹森林。
我們用最小生成樹的思想,從小到大加邊。
在加邊時,我們考慮其兩個端點是否連通,如果連通且該連通塊無環,那麼加入這條邊後一定會出現乙個環。如果不連通,那麼通過兩邊的兩個連通塊是否有環來判斷新的連通塊是否有環。
for
(int i=
1;i<=m;i++
)while
(!q.
empty()
)else}if
(cnt!=n) cout<<
"no\n"
;else cout<沒有考慮整個圖不連通的情況。
20151006模擬賽總結
今天上午去一中,又考了個模擬賽。這次的題有點考思維。我感覺這個第一題難度稍微大了點。一般noip第一題要麼是簡單的模擬,要麼是裸的簡單演算法,這次的第一題要自己構造演算法,並且還是列舉和貪心套在一起。我開始想的是列舉 揹包,複雜度為n 3,但是資料範圍沒給出三次方的分。於是我就覺得不靠譜。然後發現列...
20151031模擬賽總結
今天去一中,考了個模擬賽,真是坑。本來在八中食堂愉快的享受我的早飯 週末早上的番茄雞蛋燙飯 韭菜肉餅簡直爽!然後geng4512就跑過來說要去一中考試,然後兩口喝完燙飯就和他一起狂跑過去了。這次第一題組合數取模,模的不是質數。想了好大半天,沒什麼想法,然後看了下後面的題,又回來做這道題,想起了階乘分...
20160521模擬賽總結
20160521模擬賽是程式設計實習課程安排的第一次模擬賽 比賽鏈結 備註 這個系列模擬賽屬於程式設計實習練習賽,題目有很大一部分事先練習過,做這些題目為了練習碼 熟練度,也為了進行模擬考試練習的機會,所以這個系列模擬賽我每一次都參加,作為練習 題目清單見下 已解決 01 浮點數求高精度冪 已解決 ...