考試反思 1005csp s模擬測試60 招魂

2022-02-18 15:02:51 字數 3102 閱讀 1706

最近總是好一場爛一場的。沒有連續兩場排名波動小於20的。。。

沒人管。反正大臉一點臉沒有就又ak了。

但是t3爆零這種事情吧。。。

爆搜不是很難打,但是想優化想了半天剩的時間不夠結果趕忙打出來了,然後就掛了。

合理安排時間,要把碼暴力的時間也考慮到,要檢查。

t1t2仍然掛上了對拍,所以沒有全盤**。

總體來說是相對簡單的一套題。

t1:嘟嘟嚕

我的思路不太一樣。但是複雜度是相似的。

$o(m+log_}\frac)$

因為題面裡說開無限棧了,然後我就想到了遞迴打法。

int winner(int n)函式處理剩下n個人時最終勝者的目前編號。

那麼如果剩餘人數n>m,那麼你就可以把n/m個人同時乾掉,從第n/m*m+1個人開始數來計算勝者

如果n<=m的話,那就乾掉乙個人然後繼續遞迴,和約瑟夫一樣。

這樣的話每次遞迴,人數會在$-1$和$\times \frac$裡選乙個來 讓它快速減小,可以得到上面的複雜度。

據$o0o$打表證明,使n為1e9,當m取到大約1e6時函式的增長速度達到峰值,再之後的增長速度大約為線性。

而本題資料範圍1e5時的函式值僅僅是1e5多一點。

總之o(可過)。

1 #include2

intm,n,t;

3int winner(int

n)10

main()

view code

t2:天才紳士少女助手克里斯蒂娜

這道題是放假前讓zkq出資料的那道題(這資料不是現成的嘛,還白給他送了個ac)

化式子,拆平方,最後發現要求的就是$\sum\limits_^r \sum\limits_^r x_i^2 y_j^2 - x_i y_i x_j y_j$

乘法分配律,得到的就是區間$(\sum\limits_^x_i^2)\times(\sum\limits_^y_i^2) - (\sum\limits_^x_iy_i)^2$

線段樹或樹狀陣列維護區間$x^2,y^2,xy$的和即可。注意常數。

1 #include2

#define mod 20170927

3int cl[4000005],cr[4000005],x2[4000005],y2[4000005],xy[4000005],x[1000005],y[1000005

],xy,x2,y2;

4int

read()

10#define lc p<<1

11#define rc p<<1|1

12int mod(int p)

13void up(int p)

14void build(int p,int l,int

r)17 build(lc,l,l+r>>1);build(rc,(l+r>>1)+1

,r);up(p);18}

19void chg(int p,int

pos)

21 chg(cr[lc]>=pos?lc:rc,pos);up(p);22}

23void ask(int p,int l,int

r)25

if(l<=cr[lc])ask(lc,l,r);if(r>=cl[rc])ask(rc,l,r);26}

27main()

34 }

view code

t3:鳳凰院兇真

沒想到。《演算法競賽高階指南》上的原題竟然也不會做了。

想的是三維,表示a串到了i位,b串到了j位,匹配的最大值是k的最大值。

然而最後一維可以壓掉,可以發現最後一維與前兩維有關。

我們只要強制b串的第j位必選就行了,這樣就能得知最後乙個選的是幾,即最大值是幾。

簡單的n3列舉。

1 #include2

int n,m,x[5005],y[5005],fr[5001][5001],sta[5005

],top;

3short dp[5001][5001];4

void upd(int i,int j,int li,int lj,intw)9

void get_back(int i,int j)

14int

main()

21else upd(i,j,i-1,j,0

);22

int m=0;for(int i=1;i<=m;++i)if(dp[n][i]>dp[n][m])m=i;

23 printf("

%d\n

",dp[n][m]);

24get_back(n,m);

25for(int i=top;i;--i)printf("

%d ",sta[i]);puts(""

);26 }

view code

優化,邊掃邊記錄上一層的最優決策。n2。

1 #include2

int n,m,x[5005],y[5005],fr[5001][5001],sta[5005

],top;

3short dp[5001][5001];4

void upd(int i,int j,int li,int lj,intw)9

void get_back(int i,int j)

14int

main()26}

27int m=0;for(int i=1;i<=m;++i)if(dp[n][i]>dp[n][m])m=i;

28 printf("

%d\n

",dp[n][m]);

29get_back(n,m);

30for(int i=top;i;--i)printf("

%d ",sta[i]);puts(""

);31 }

view code

回溯統計答案沒什麼好說的。

思路積累:

考試反思 1005csp s模擬測試61 休止

連續不知道多少場了,都是一場10名以內一場20以外。波動極大。還極有規律。拿到這套題,看到t1大模擬無話可說。然後考場上我覺得t2很簡單。然後就碼了兩個半小時。t3資料水了暴力70。t1 磚塊 大模擬。其實也不大。記錄上下左右前後邊界然後滾就是了 閒得慌打hash map 1 include2 in...

考試反思 1114csp s模擬測試115 零遲

最後一次了,允許自己混進榜裡吧。沒有心態,原題不會做 真的忘了 t2的搜尋沒有分。零 遲 酷刑 只有在最後的時刻才開始意識到,一切的一切都已經晚了。就在眼前了。沒有機會了。退役,告別oi,粉碎夢想,這,就是最嚴苛的酷刑。生存,生存!hzoi2018!所有人!一年走來,我們還要繼續走下去!csp s,...

考試反思 1112csp s模擬測試111 二重

還是ak場。考前信心賽?而且t3的部分分還放反了所有80的都其實只有50。總算在ak場真正ak了一次。手感好,整場考試很順利。要不是因為t3是原題可能就沒這麼好看了。20mint1,50mint2,去趟廁所回來70min想到t3,110min寫完調完對拍完,然後去學skyh寫平衡樹了。然後我發現我不...