日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BestCoder Round #39 解题报告

發(fā)布時間:2023/12/18 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BestCoder Round #39 解题报告 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

?

  現(xiàn)場只做出前三題w

  不過不管怎樣這既是第一次認真打BC

  又是第一次體驗用在線編譯器調(diào)代碼

  訂正最后一題花了今天一整個下午(嗚嗚

  收獲還是比較大的^_^

?

?


?

?

?

?

 Delete

?

wld有n個數(shù)(a1,a2,...,an),他希望進行k次刪除一個數(shù)的操作,使得最后剩下的n?k個數(shù)中有最多的不同的數(shù),保證1n100,0k<n,1ain(對于任意1in)

?

  比較簡單的貪心...

  把出現(xiàn)一次以上的多于一次的部分都刪除掉

  如果k依然>0就要刪去k種不同的數(shù)

?

?


?

?

?

Multiple


wld有一個序列a[1..n], 對于每個1i<n, 他希望你求出一個最小的j(以后用記號F(i)表示),滿足i<jn, 使ajai的倍數(shù)(即aj mod ai=0),若不存在這樣的j,那么此時令F(i) = 0 保證1n10000,1ai10000 對于任意 1in, 且對于任意1i,jn(i!=j),滿足ai != aj

?

  n^1.5次的大暴力即可

  發(fā)現(xiàn)BC好多題目都是用這種方法...在此之前并不認為這樣可以過

  對于每個數(shù)枚舉它所有的因數(shù),刷新它們的f[i]值

?

?


?

?

?

Code


wld有一個長度為n的序列a1..an wld想要你給出下面這段c++代碼的輸出: int calc() {int res=0;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){res+=gcd(a[i],a[j])*(gcd(a[i],a[j])-1);res%=10007;}return res; } 保證1n10000,1ai10000 (對于任意1in)

?

?

  我的做法是n^1.5次的,但是發(fā)現(xiàn)題解是nlog(n)

  但上次莫比烏斯反演只看到一半...所以先棄療吧

  講講n^1.5次的做法

  首先n^1.5的復雜度將每個數(shù)的因子打上標記

  我們可以枚舉最大公約數(shù)d,如果有x個數(shù)有d這個因子

  那么就累計x*(x-1)次這個答案

  但是顯然我們會發(fā)現(xiàn)問題

  如果兩個數(shù)有4這個因子,那么在統(tǒng)計2的時候又會統(tǒng)計一次!

  解決方法很簡單,我們可以預先處理出每個數(shù)應累計的答案f[i]

  枚舉最大公約數(shù)d的同時,再枚舉d的因子i,減去這個因子的答案

  注意:這里的答案也是處理過的答案,即f[i]

  最后單獨累計i=j時的情況

  

  手速太慢...原因有好多個

  開始寫的時候把+=看成了*=

  所以寫了乘法逆元...然后調(diào)了半天輸出了很多中間過程才發(fā)現(xiàn)錯誤

  然后還忘記了i=j的情況

  后來WA了一發(fā),是因為枚舉最大公約數(shù)的時候應枚舉到a[i]的最大值而不是n

  剛開始沒查出來,又開始證明算法的思路即f[i]的計算是否正確

  改來改去越來越離譜..突然發(fā)現(xiàn)是后面的問題

  然后就1h+辣> <

?

?


?

?

?

Lucky


wld有n個數(shù)(a1...an) 保證對于任意1in1ain wld有一個常數(shù)k保證2k2?n 為了消除歧義保證k為奇數(shù) 他有m個詢問 每個詢問有參數(shù)l1,r1,l2,r2 保證(1l1r1<l2r2n) 對于每個詢問你需要回答有多少個二元組(ij)滿足: l1ir1l2jr2ai+aj=k 保證1n30000,1m30000

?

?

  

  恩..這道題在考場上確實是寫不出來的..

  今天下午去學習了一下莫隊算法...覺得很有趣...

  

  莫隊算法就是建立在分塊基礎上,離線解決一系列區(qū)間詢問問題

  首先這道題假設已知[l,r]中相加=k的對數(shù)

  那么我們可以通過復雜度不高的代價得知[l-1,r][l+1,r][l,r-1][l,r+1]的答案

  剛開始是打算用log級的倍增做的..但是交了一發(fā)TLE了

?

  這道題詢問的是[l1,r1][l2,r2]中滿足條件的對數(shù)

  如何轉(zhuǎn)換成單個區(qū)間上面[l,r]中相加=k的對數(shù)呢

  假設題目中讓我們求的是一個在區(qū)間A,一個在區(qū)間B的答案,我們假設為F(A,B),并且令F中統(tǒng)計的數(shù)對為有序的

  即只統(tǒng)計a[i]+a[j]=k且(i<j)的情況

  可以證明得出F(A,B) = F(A+C+B,A+C+B)-F(A+C,A+C)-F(B+C,B+C)+F(C,C)

  F(A+C+B,A+C+B)-F(A+C,A+C)-F(C+B,C+B)+F(C,C)

  = F(A,A)+F(A,C)+F(A,B)+F(C,C)+F(C,B)+F(B,B)-F(A,A)-F(A,C)-F(C,C)-F(C,C)-F(C,B)-F(B,B)+F(C,C)

  = F(A,B)

  轉(zhuǎn)化成了4部分兩區(qū)間相等的F,也就是可以用上面的莫隊算法來解決了

?

  最后一個問題,就是轉(zhuǎn)移的時候如何從log(n)轉(zhuǎn)化成O(1)

  在執(zhí)行莫隊的同時,即l,r一位一位移動的時候,用一個數(shù)組記錄當前區(qū)間內(nèi)某個數(shù)出現(xiàn)的次數(shù)就可以了...

  

?


?

?

  漲了177w

  手速還是慢慢慢

?

  居然過了一個周末一下子就27號了呢

  居然再過兩天又要回家了呢

  

  27/.Apr.

?

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/mjy0724/p/4460991.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的BestCoder Round #39 解题报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。