洛谷 xht模擬賽 題解

2022-05-31 08:06:14 字數 3312 閱讀 2609

大家期待已久並沒有的題解終於來啦~

這次的t1和haoi2016撞題了...深表歉意...表示自己真的不知情...

天下的水題總是水得相似,神題各有各的神法。——《安娜·卡列妮娜》

出題的過程:@phoenixeclipse @xht13127提供了一些想法,我負責寫標程,對拍,造資料...然後 @sakuradance幫我驗了題。感謝上述,以及其他幾位dalao的資辭。

和haoi2016撞車

30分做法:直接爆搜,注意取模。

100分做法:topo排序然後簡單dp,或者直接爆搜加個記憶化...(如果是記憶化,記得不要用0來表示未訪問的點qwq)

wyw神犇提出了一種\(o(\sqrt n)\)的做法,太神啦!詳見:

一道披著幾何外衣的數學題~

問題可以轉化為,對 \(a\le i\le b\) ,所有 \(xyz=i\) 的所有整數解\((x,y,z)\) , 求\((|x|+|y|+|z|)^2\) 的和。

由於對稱性,所以我們只需要算第一卦限(\(x,y,z>0\))的答案,再乘4就行啦。

30分做法:暴力列舉\(i\),再暴力列舉滿足\(xyz=i\) 的 \(x,y,z\),然後暴力計算答案。

60分做法

首先,我們可以用\([1,b]\) 的答案減去 \([1,a-1]\) 的答案。

然後注意到\((x+y+z)^2=(x^2+y^2+z^2)+2(xy+yz+zx)\) , 其中兩個括號裡的三項都是對稱式。於是我們可以單獨算出所有的\(x^2\) 和 \(yz\) 對答案的貢獻,再把前者加上後者乘2。

接下來推式子...公式恐懼症請做好心理準備。

設\(\sigma(n)\) 等於n的約數個數;

\[\begin

\\ans1=&\sum_^n\sum_x^2

\\=&\sum_^n\sum_x^2\sum_

\\=&\sum_^n\sum_x^2\sigma(\frac i x)

\\=&\sum_^n x^2\sum_\sigma(\frac i x)

\\=&\sum_^n x^2\sum_\sigma(d)

\end

\]\[\begin

\\ans2=&\sum_^n\sum_yz

\\=&\sum_^n\sum_\sum_yz

\\=&\sum_^n\sum_\frac i x\sigma(\frac i x)

\\=&\sum_^n\sum_x\sigma(x)

\\=&\sum_^n x\sigma(x)\lfloor \frac n x \rfloor

\end

\]\(ans=4*(ans1+2*ans2)\)

對於ans1,因為\(\lfloor \frac n x \rfloor\) 只有\(\sqrt n\) 種取值, 我們可以用一種經典的方法分段計算,再對後面的字首和預處理出來,或者暴力求和,這樣可以做到o(n)。

對於ans2,同樣分段計算,再預處理\(x\sigma(x)\) 的字首和,也是o(n)。

總複雜度:o(n)。如果你喜歡用一種nlgn的方法篩約數個數...那就是o(nlgn)。

現場有一位大爺用了篩法也過了60分,orz。

100分做法

在60分做法的基礎上,用杜教篩求\(\sigma(x)\) 和 \(x\sigma(x)\) 的字首和,複雜度o(n^(2/3))。

詳見唐老師部落格:

被噴是裸的資料結構題了啊...

觀察題目中的要求,將變數看做點,方程看做邊,只會形成一棵樹。

30分做法:因為只有詢問操作,我們先讀入所有資料,建一棵樹,每條邊用兩條有向邊表示,權值分別為c和-c,然後dfs一遍,預處理出lca(或者你要樹剖也行),然後處理詢問。

100分做法:發現只要用lct維護就行了。幾個細節:邊權不好維護,那麼我們就插入虛擬的點來表示邊。在詢問一條鏈的時候,要求鏈上的方程是x1-x2=a, x2-x3=b, x3-x4=c...這樣的形式,即要求符號的方向相同。我們可以讓每條邊上的方程表示子節點減父節點的值,然後換根的時候,發現只有新的根到原來的根的路徑上的順序要顛倒,於是在access的splaytree裡面打乙個tag取反。具體實現見**。

t1

#include using namespace std;

typedef long long ll;

const int maxn=1e5+5, md=10007;

int in[maxn], deg[maxn], to[maxn][10], k[maxn], n;

int p[maxn], m, f[maxn], ans;

int read()

f[k]=f[i]*2;

g[k]=1;}}

for(int i=1; it3#include using namespace std;

typedef long long ll;

const int maxn = 3e5+5, md=6662333;

struct node

tr[maxn], *nil=tr;

inline void init(int x)

inline void up(node *x)

inline void down(node *x)

if(x->rev)

}inline int isrt(node *x)

void rot(node *x)

node *st[maxn]; int top;

void splay(node *x)

}void access(node *x)

void mkrt(node *x)

void lnk(node *x, node *y)

void cut(node *x, node *y)

node *getrt(node *x)

int n, m, k, q, ne;

inline int xht(int x)

int ha[maxn], hb[maxn], he[maxn], nxt[maxn], hd[md], nh=1;

void add(int a, int b, int e)

int del(int a, int b)

}return 0;

}int main()

for(int i=0; i}elseelse puts("-1");}}

return 0;

}

洛谷noip模擬賽 分組

小 c 在了解了她所需要的資訊之後,讓兔子們調整到了恰當的位置。小 c 準備給兔子 們分成若干個小組來喂恰當的胡蘿蔔給兔子們吃。此時,nn 只兔子按一定順序排成一排,第 ii 只兔子的顏色是 a iai 由於順序已經是被 調整好了的,所以每個小組都應當是序列上連續的一段。在分組前,小 c 發現了乙個...

洛谷團隊月賽題 題解

10pt s10pts 10pts 暴力算不解釋,時間複雜度o k n k2 o kn k 2 o kn k 2 30pt s30pts 30pts 我們觀察到n nn很大,楊輝三角會t,直接算會上溢,所以需要預處理出1 11 k kk逆元再算,時間複雜度o k n nl ogk n2 o kn n...

洛谷團隊月賽題 題解

10pt s10p ts暴力算不解釋,時間複雜度o k n k2 o k n k2 30p ts30 pts我們觀察到n n很大,楊輝三角會t,直接算會上溢,所以需要預處理出11 k k逆元再算,時間複雜度o k n nl ogk n2 o kn nlog k n2 或o k n n k n2 o ...