2020牛客暑期多校訓練營 第七場

2021-10-08 18:32:38 字數 2841 閱讀 7450

可以看成把乙個m×n

m×nm×

n的長方形劃成若干個寬為1

11的矩形,使得存在兩種分割方法能恰好填滿長和寬。然後只要不斷在矩形裡劃分正方形就行了。

#include

using

namespace std;

typedef

long

long ll;

intmain()

for(

int i =

1; i <= n;

++i) ans.

push_back

(m);

cout << ans.

size()

<< endl;

for(

auto

&i : ans)

printf

("%d "

, i)

; cout << endl;

}return0;

}

題面生草。

打個小表,比如到1e4,發現只有1和24。之後肯定不可能再有其它數了。

平方求和公式按立方速度增長,最後肯定不可能夾在兩個平方數之間的。

**由璇大師提供。

#include

using

namespace std;

intmain()

}}

這題做得太痛苦了。思路看完題大概七八分鐘不到就有了,但是一直寫不出來。最後磨了兩個小時才過。

第一種操作每次加上k

kk,所以會發現二元組左邊的數模k

kk一定餘n

nn。而一旦執行了一次第二種操作,之後無論再進行第一種或第二種操作,模k

kk一定都是0。初始狀態n

nn都是1,所以餘數只可能是0

00或1

11。而且可以證明對於小於n

nn的所有數,只要它模k

kk同餘0或1就一定能構造出這樣一對符合題意的二元組。所以問題轉化成對於所有小於k

kk的數k

kk,求模k

kk同餘0或1的總數。

之後考慮列舉k

kk。對於某乙個k

kk而言,1~n

nn中是k

kk倍數的數有⌊nk

⌋\lfloor \rfloor

⌊kn​

⌋個。同餘1的數可以這麼計算:1+p

k≤

n1+pk\le n

1+pk≤n

,解出p≤⌊

n−1k

⌋p\le \over k}\rfloor}

p≤⌊kn−

1​⌋,其中p

pp為整數。但是這個式子中p

pp可以取到0

00,於是1~n

nn中模k

kk餘1的數為⌊n−

1k⌋+

1\over k}\rfloor}+1

⌊kn−1​

⌋+1個。不過對於k=1

k=1k=

1要特判,因為此時沒有模k

kk同餘1的數。

所以最後答案為σk=

2k⌊n

k⌋+σ

k=2k

⌊n−1

k⌋+(

k−2+

1+n)

=σk=

2k⌊n

k⌋+σ

k=2k

⌊n−1

k⌋+(

k+n−

1)

\sigma_^\lfloor \rfloor+\sigma_^\over k}\rfloor}+(k-2+1+n)=\sigma_^\lfloor \rfloor+\sigma_^\over k}\rfloor}+(k+n-1)

σk=2k​

⌊kn​

⌋+σk

=2k​

⌊kn−

1​⌋+

(k−2

+1+n

)=σk

=2k​

⌊kn​

⌋+σk

=2k​

⌊kn−

1​⌋+

(k+n

−1)之後就不需要管題面了,只要把這坨東西求出來就好。

然後發現列舉k

kk就炸了。然後開始脫髮。

苦惱將近乙個半小時,發現可以分塊。因為對於某一段區間內的k

kk而言,下取整可能是一樣的。之後從2開始列舉k

kk,每次計算出當前值對應的右邊界,乘起來之後再把k

kk賦成右邊界加一就好了。複雜度似乎是o(n

)o(\sqrt n)

o(n​

)的。具體我也不知道,也不會證。反正能過。

**裡還有個坑點就是右邊界要在r

rr和k

kk當中取個min。不然有可能直接就跳出去了。第一次就這裡哇了。

#include

using

namespace std;

typedef

long

long ll;

const

int mod =

1e9+7;

intmain()

for(ll i =

2; i <= k;

) sum =

(sum + k -1)

% mod;

cout << sum << endl;

return0;

}

賽後總結:

h卡了很久。做完h之後d很快就出了。應該先去d再返回看h的。

之後開始罰坐。

另外就是英語太差,j看不懂。吐了。

什麼,你問我前面幾場的總結和題解呢?

在補了在補了.jpg

2020牛客暑期多校訓練營(第七場)

b題 傳送門 link 題意 有n m個口罩,需要要把它們裝到一些箱子裡面,要使箱子數盡可能少,並且滿足兩個條件,這些箱子可以分成m組,每組n個口罩,或者分成n組,每組m個口罩。思路 分配方案其實就是乙個迭代的過程。為了使得箱子數最少,每個箱子就應該盡可能的多裝。每次優先裝min n,m 個箱子,每...

2020牛客暑期多校訓練營(第七場)

難度係數 dd fake news 講題人所謂的 暖暖的簽到題 完全平方和,只要特判1和21即可即可 includeusing namespace std typedef long long ll define t ll t scanf lld t while t intmain else b ma...

2020牛客暑期多校訓練營(第七場)題解DBH

題目傳送門 提前打了一下表,發現好像就1和24可以,試了一下a了 附上大佬的證明 如何證明 1 2 n 為平方數的解只有 n 1 或 n 24?include intmain return0 題目傳送門 mask allocation 對於n m個口罩,將其分成可以組合成n個m個m個n,只能序列內疊...