考試反思 1003csp s模擬測試58 沉澱

2022-02-18 15:02:51 字數 3062 閱讀 2909

穩住陣腳。

還可以。

至少想拿到的分都拿到了,最後一題的確因為不會按秩合併和線段樹分治而想不出來。

對拍了,暴力都拍了。挺穩的。

但是其實也有波折,險些被卡記憶體。

如果記憶體使用不連續或申請的記憶體全部使用的話,切記計算記憶體,一點都不能開大。

t1:divisors

直接根號篩,拿map也能過。

遍歷map直接begin和end啊。。。

1 #include2

int cnt[202];3

struct

hash_map

9}m;

10int

main()

16for(int i=1;i<=m.cnt;++i)cnt[m.w[i]]++;

17for(int i=1;i<=m;++i)cnt[0]-=cnt[i];

18for(int i=0;i<=m;++i)printf("

%d\n

",cnt[i]);

19 }

hash_map 581b

hash_map的陣列大小要記得計算空間

t2:market

應該都能看出是個揹包。

不讀錯題問題都不大。

1 #include2

using

namespace

std;

3int dp[301][90002

];4 vectorint,int> >v[305];5

intmain()

15for(int v=89999;~v;--v)dp[t][v]=min(dp[t][v],dp[t][v+1

]);16}17

while(m--)scanf("

%d%d

",&t,&c),printf("

%d\n

",upper_bound(dp[t],dp[t]+90001,c)-dp[t]-1

);18 }

稍短 641b

不離線詢問的話不要開long long。會mle。

t3:dash speed

好題。考場上一直在想主席樹,以為有50000有70000會卡兩個log的。顯然沒有。

這題要處理對於每乙個速度的答案。

先考慮li=1的特殊性質。

我們從大到小的考慮速度,這樣的話就是乙個不斷解鎖邊的過程。

不斷填邊,求最長鏈。和模擬測試40《影子》的並查集做法一模一樣。

如果li不是1呢?那就有刪邊操作了。然而直接做貌似不可撤銷。

考慮分治。

如果我們現在要求解速度為1和2時的答案,那麼乙個暴力的思路就是:

把1能過的所有邊連上,求解,撤銷。把2能過的所有邊連上,求解,撤銷。

複雜度是n2的。

我們可以發現上面這個方法存在冗餘。如果我們一開始就把1和2的邊都連上,在求解1,2時不撤銷這些邊,就可以快一些了。

我們利用的是線段樹的結構,我們現在考慮所有[3,5]的詢問,於是加入l<=3&&r>=5的邊。

然後是處理3的詢問,再加入速度可以接受3的邊,求解3,再撤銷剛剛加入的這些邊就好。。。

然後不斷按mid分治下去直到葉節點就是答案。

怎麼撤銷?

倍增lca並沒有被卡t。

然而因為要撤銷,所以按照原來那道題打路徑壓縮並查集是不可行的(過程中修改的點太多),為了保證複雜度,我們採取按秩合併。

按秩合併其實就是把並查集按照深度合併,深度小的往打的裡面合併的話那麼很大可能總深度不變,或者+1。

只用兩棵樹深度恰好相等時深度+1,其餘時候深度還是原來樹的深度。不知道為什麼網上給的板子深度陣列叫rk。

1

int find(int k)

2int merge(int a,int

b)

按秩合併大概的板子

然後就差不多了。

1 #include2 #include3 #include4

using

namespace

std;

5int n,m,fir[70005],l[140005],to[140005],cnt,ans[70005],u[70005],v[70005],l[70005],r[70005];6

void link(int a,int b)

7int p1[70005],p2[70005],mx[70005],f[70005][20],f[70007],rk[70005],dep[70005],stans[1500005];8

int stp1[1500005],stp2[1500005],stmx[1500005],stf[1500005],strk[1500005],o[1500005

],top,ans;

9 vectorv[1500000

];10

void insert(int p,int l,int r,int

i)12

if(r[i]>l+r>>1)insert(p<<1|1,(l+r>>1)+1

,r,i);

13if(l[i]<=l+r>>1)insert(p<<1,l,l+r>>1

,i);14}

15int find(int k)

16void dfs(int p,int

fa)21

int dt(int a,int

b)29

void copy(int x)

30void recover()

31void merge(int i)

46void divide_and_conquer(int p,int l,int r)

49 divide_and_conquer(p<<1,l,l+r>>1

);50 divide_and_conquer(p<<1|1,(l+r>>1)+1

,r);

51 ed: while(top>re)recover();52}

53int main()

稍長

1003CSP S模擬測試賽後總結

我是垃圾 我只會騙分。拿到題目通讀一遍,感覺t3 暴力 是個樹剖 線段樹。剛學了樹刨我這個興奮啊。然而手懶決定最後再說。對著t1一頓yyxjb碼了個60pts的測試點分治就失去夢想了。順便圍觀fh大神寫完t1並拍上,心態稍崩 然後開始yyt2。經過我發了半天呆縝密而周詳的思考覺得可以打個揹包。裸揹包...

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

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

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

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