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

2021-10-08 19:01:42 字數 1847 閱讀 3926

題目傳送門

提前打了一下表,發現好像就1和24可以,試了一下a了

附上大佬的證明:如何證明 1²+2²+…+n² 為平方數的解只有 n=1 或 n=24?

#include

intmain()

return0;

}

題目傳送門

mask allocation

對於n*m個口罩,將其分成可以組合成n個m個m個n,只能序列內疊加,不能拆分,答案按照字典序排序輸出

每次選擇當前可以組合的最大數即可

#include

#include

#include

using

namespace std;

const

int n=

1e5+9;

// #define tds_acm_local

int n, m, a[n]

, ans;

void

solve()

cout<

for(

int i=

1; i<=ans; i++

) cout<

<<

" ";

cout<

return;}

intmain()

題目傳送門

看一下上圖,稍微推一下其實很容易就能發現規律了, 每列的公式為n∗k

n∗kn∗

k 或者 n∗k

−(n−

1)n∗k−(n−1)

n∗k−(n

−1),n為n的行,直接跑o(n)的話很明顯t了,所以我們講將公式換一種方式寫一下:

∑i=

1n(n

/i)+

∑i=2

n(n−

1)/i

+k−1

∑^n_(n/i)+∑^n_ (n-1)/i+k-1

∑i=1n​

(n/i

)+∑i

=2n​

(n−1

)/i+k−1

很明顯的除法分塊(∑i=

1nn/

i∑^n_n/i

∑i=1n​

n/i)的變形,然後兩個求和公式的上界應該是min

(n,k

)min(n,k)

min(n,

k)和m in

(n−1

,k)min(n-1,k)

min(n−

1,k)

#include

#include

#include

using

namespace std;

#define ll long long

const

int mod=

1e9+7;

// #define tds_acm_local

inline ll division

(ll n,ll k, ll t)

//除法分塊

return ans;

}void

solve()

intmain()

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

可以看成把乙個m n m nm n的長方形劃成若干個寬為1 11的矩形,使得存在兩種分割方法能恰好填滿長和寬。然後只要不斷在矩形裡劃分正方形就行了。include using namespace std typedef long long ll intmain for int i 1 i n i a...

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...