AtCoder Regular Contest 065
AtCoder Regular Contest 065
C - Daydream
Score : 300300300 points
倒著來就行了,正著來會產生歧義匹配,dreamer,dreamdreamer,dreamdreamer,dream產生歧義,倒著來的話是確定的。
代碼
D - Connectivity
Score : 400400400 points
用兩個并查集合并起來兩個圖,讓后開一個mapmapmap,讓mp[p1[i],p2[i]]++mp[{p1[i],p2[i]}]++mp[p1[i],p2[i]]++,最后輸出即可。
代碼
E - Manhattan Compass
Score : 900900900 points 切比雪夫距離 + 二分
題意:
給你nnn個點對,問從aaa出發,每次走aaa到bbb的曼哈頓距離,問能走到多少個點對。
1≤n≤1e51\le n\le 1e51≤n≤1e5
思路:
首先將曼哈頓距離轉換成切比雪夫距離,距離變成max(abs(xa?xb),abs(ya?yb))max(abs(x_a-x_b),abs(y_a-y_b))max(abs(xa??xb?),abs(ya??yb?)),顯然可以排序亂搞。
將x,yx,yx,y分兩次考慮,這里只考慮xxx,設a?da-da?d的曼哈頓距離是ddd。
將xxx從小到大排序,讓后離散化一下,將每個點yyy坐標插到對應的xxx的位置,之后遍歷xxx,找x?dx-dx?d的位置,這個時候已經保證了距離為ddd了,那么我們只需要滿足abs(y?yk)<=dabs(y-y_k)<=dabs(y?yk?)<=d即可,可以在xxx這個位置存的yyy內二分找到位置算貢獻。
但是這樣直接寫遍歷所有位置去重顯然是會超時的,考慮優化一下。
有兩種,思路是一樣的,講一下簡單的。
我們還是找到位置,但是不是在x?dx-dx?d的這個位置找yyy,而是我們將(x,y)(x,y)(x,y)存到一個pairpairpair里面,讓后二分(x?d,y?d),(x?d,y+d)(x-d,y-d),(x-d,y+d)(x?d,y?d),(x?d,y+d)的位置,由于角上的位置會重復,我們算yyy的時候去掉即可。假設二分的位置是(l,r)(l,r)(l,r),那么我們給(l,r)(l,r)(l,r)打一個懶標記,代表將(l,r)(l,r)(l,r)內的點合并起來,合并是為了方便最后求答案,答案一定是與aaa連通的。
這樣就可以了,注意細節即可。
代碼1
代碼2
F - Shuffling
Score : 900900900 points dpdpdp
題意:
給你一個串sss,依次進行mmm次操作,每次可以將[li,ri][l_i,r_i][li?,ri?]區間內的sss隨意排序,問最終能生成多少不同的010101序列,保證詢問的lll升序。
1≤n≤3000,1≤m≤30001\le n\le 3000,1\le m\le 30001≤n≤3000,1≤m≤3000
這是一個又難又簡單的dpdpdp,考慮到lll升序,我們設dp[i][j]dp[i][j]dp[i][j]表示到了第iii個,前iii個有jjj個111,轉移很簡單,就是dp[i][j]+=dp[i?1][j],dp[i][j]+=dp[i?1][j?1]dp[i][j]+=dp[i-1][j],dp[i][j]+=dp[i-1][j-1]dp[i][j]+=dp[i?1][j],dp[i][j]+=dp[i?1][j?1],主要的問題是jjj的范圍。
先考慮這個范圍是否能構成,就是先看成010101可以隨意分配,我們先求一下每個位置被覆蓋的區間最遠能到哪里,設為maxr[i]maxr[i]maxr[i],那么[1,maxr[i]][1,maxr[i]][1,maxr[i]]區間內的010101假設都可以分配給前iii個,這樣能算出來前iii個111的個數的上限和下限,讓后直接轉移即可。
雖然某個狀態可能是不存在的,但是不影響答案。
代碼
總結
以上是生活随笔為你收集整理的AtCoder Regular Contest 065的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用电脑怎么学SAI绘画如何画画电脑
- 下一篇: 玩法多样不仅仅是手机秒变笔记本电脑手机秒