最近總是好一場爛一場的。沒有連續兩場排名波動小於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 #include2view codeintm,n,t;
3int winner(int
n)10
main()
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 #include2view code#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 }
t3:鳳凰院兇真
沒想到。《演算法競賽高階指南》上的原題竟然也不會做了。
想的是三維,表示a串到了i位,b串到了j位,匹配的最大值是k的最大值。
然而最後一維可以壓掉,可以發現最後一維與前兩維有關。
我們只要強制b串的第j位必選就行了,這樣就能得知最後乙個選的是幾,即最大值是幾。
簡單的n3列舉。
1 #include2view codeint 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 }
優化,邊掃邊記錄上一層的最優決策。n2。
1 #include2view codeint 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 }
回溯統計答案沒什麼好說的。
思路積累:
考試反思 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寫平衡樹了。然後我發現我不...