Luogu6300 悔改 FFT,閾值法

2022-05-25 14:24:07 字數 1738 閱讀 5144

題目描述:小 d 有一些同樣長的木棍,然後每個都切成長度分別不超過 \(m\) 的兩段。現在想拼回去,但是小 d 遺失了一部分木棍,而且還忘了它們的長度和個數,所以他想拼接出盡可能多的相同長度的木棍。給出每段小木棍的長度,求盡可能多的木棍個數和此時的木棍最小長度。

資料範圍:\(2\le n,m\le 10^5,1\le a_i\le m\)

開桶 \(\\)

\[\begin

ans_x&=\frac12\sum_\min(b_i,b_j) \\

&=\sum_k\sum_[b_i\ge k][b_j\ge k]

\end

\]使用 fft,成功得到了乙個 \(o(nm\log m)\) 的比暴力還lj的做法。

但是你發現 \(\sum b_i=n\le 10^5\),所以你可以"閾值法"(?),定乙個數 \(t\),當 \(k\le t\) 時用 fft 計算,\(b_i>t\) 的數不超過 \(\frac nt\) 個,所以時間複雜度是 \(o(tm\log m+(\frac nt)^2)\)。

我不會算函式最值,純粹喜歡 \(t=10\) 而已(草)。

#include#define rint register int

using namespace std;

const int n = 1 << 18, b = 10;

const double pi = acos(-1);

int n, m, a[n], b[n], tot, f[n], now, ans;

templateinline void read(t &x)

struct comp

inline comp operator + (const comp &o) const

inline comp operator * (const comp &o) const

inline comp operator - (const comp &o) const

inline comp operator ~ () const

} w[2][n], a[n];

int rev[n], lim;

inline void calrev(int len)

for(rint i = 0;i < lim;++ i) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << l);

for(rint mid = 1;mid < lim;mid <<= 1)

for(rint i = 0;i < mid;++ i) w[1][mid + i] = ~(w[0][mid + i] = comp(cos(pi / mid * i), sin(pi / mid * i)));

}void fft(comp *a, int op)

if(op) for(rint i = 0;i < lim;++ i) a[i].x /= lim;

}int main()

for(rint i = 1;i <= m;++ i)

for(rint i = 1;i <= tot;++ i)

for(rint j = 1;j <= tot;++ j) f[b[i] + b[j]] += min(a[b[i]], a[b[j]]);

for(rint i = 1;i <= (m << 1);++ i) if(f[i] > f[ans]) ans = i;

printf("%d %d\n", f[ans] >> 1, ans);

}

6 30學習筆記

border radius屬性 在css3中可以使用border radius進行圓角邊框的繪製,在網頁中呢,我們經常使用圓角邊框來美化我們 的頁面,在css3出現之前呢 我們如果要在網頁上展示乙個圓角邊框的一 個效果,那麼我們需要繪製圖形 在css3出現之後呢我們就只需要 段簡單的 就可以實現圓角...

普通 隨筆 6 30

2015年的一半差幾個小時也要過去了。貌似今晚是多加了一秒 閏秒 今晚可以多睡一秒了 然並卵 自從某acm金牌師兄來講了次網路流後,自己也停止bzoj的刷題了,專心學各種新演算法。於是就整理出了這麼長的列表。這些都是我不會的。大概90多項吧。頓時覺得oi之路極其漫長。自從用了xmind之後好多題解也...

Elasticsearch6 3 0學習筆記(二)

先準備測試資料,es有提供有關批量執行的方式 bulk 參考 但是在postman中插入式異常,所以暫時使用單條插入的方式 put localhost 9200 movies movie 1 put localhost 9200 movies movie 2 put localhost 9200 m...