2019 10 9 模擬賽 總結

2021-09-28 11:21:33 字數 2115 閱讀 8232

滿分: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 浮點數求高精度冪 已解決 ...