大家期待已久並沒有的題解終於來啦~
這次的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 ...