期望得分:100+100+0=200
實際得分:5+0+0=5
每加入乙個數,x的因數字置++
注意:根號x列舉時,如果x是完全平方數,根號x會重複累計2次,要減去
考場上沒減,5分 /(ㄒoㄒ)/~~
樹形dp
令col[i] 表示 i與i的父節點之間的連邊
f[i] 表示 在節點i的子樹中,鏈的乙個端點為i,且與i直接相鄰的邊的邊的顏色 不與col[i] 相同 的方案數
f[i] 表示對應的權值和
g[i] 表示在節點i的子樹中,鏈的乙個端點為i 的方案數
g[i] 表示對應的權值和
將i的子樹中經過i的鏈分為兩種
① 以i為端點,用 g g 統計
②i為中間的乙個點,用 f f 統計
狀態轉移方程:
設j為i的子節點,val[i]表示節點i的點權
① g[i]=σ(f[j]+1) g[i]=σ(f[j]+val[j])
② f[i]= σ(f[j]+1) f[i]=σ(f[j]+val[j]) 其中,j滿足col[j]!=col[i]
③ g[i]+=g[i]*val[i]
④ f[i]+=f[i]*val[i]
解釋:1、g[i]、f[i] 的轉移 就是把子樹中的 g,f 累加起來,再加上子樹的個數,因為i和i的子樹的根節點(即i的子節點)構成一條新的合法的鏈
2、①、② 中 g、f 的轉移 就是把子樹中的 g、f累加起來,再加上子節點的權值和,因為i和的i的子節點構成一條新的合法的鏈
3、③、④ 所有的以i為乙個端點的鏈都累加乙個 i的權值
統計答案:
1、以i為端點的鏈,就是ans+=g[i]
2、以i為中間乙個點的鏈,顯然是要拿以i為端點的兩條鏈拼起來
①對於i的每個子樹j,假設j會被使用sum次,子樹j的合法鏈的權值總和為v,那麼 這個子樹j 對 答案的貢獻就是 sum*(v+val[j])。
加val[j]是因為 子樹j的根節點的權值不屬於v,但以這個點為鏈的乙個端點,以i的其他子樹的乙個點為鏈的另乙個端點, 這就是一條合法的鏈
如何統計sum?
設s[k]表示當前i的子樹中,以i為鏈的乙個端點 且 與i直接相連的邊的顏色為k 的鏈的條數
顏色編號大至1e9? ——離散化
那麼sum=g[i]-s[col[j]] 即只要與i直接相連的邊的顏色 不等於 col[j] ,就可以與j的子樹中的鏈 以及 j 拼接
② 考慮了鏈的拼接,還差兩條鏈的交點的權值沒有加,即i的權值。
設兩條鏈拼接的總方案數字 tot,那麼最後再加上 tot*val[i] 就行了
tot=σ ( (f[[j]+1) * (g[i]-s[col[j]]) ) / 2 原理同上
除2是因為 一條鏈被列舉了兩次
解決本題關鍵:
同一行/列只有被選中奇數次才有效
假設有i行j列被翻了過來
那麼可以得到等式
i*m+j*n-2*i*j=s
解得j=(s-i*m)/(n-2*i)
由此可知,我們只需要列舉i,就可以直接算出j
這個 i,j 合法的條件是:
① 不越界
②(n-i)%2=0,(m-j)%2=0
因為只能再翻偶數次,才能保證當前i,j 合法
如何計算一對合法的i,j的答案?
n行裡i行被翻了過來 c(n,i)
m列裡j列被翻了過來 c(m,j)
被翻了偶數次的行,就是把(r-i)/2 次機會 分給 n 行 c((r-i)/2+n-1,n-1)
注意不是n行裡面選 (r-i)/2 行翻過來,因為同一行可以不翻,也可以翻多次
同理,偶數次列為 c((c-i)/2+m-1,m-1)
把這4個c 乘起來就是這一對i,j 的答案
最後累加所有的i,j 的貢獻即可
#include#includeview codeusing
namespace
std;
#define n 200001typedef
long
long
ll;const
int mod=1e9+7
;ll inv[n],fac[n];
ll pow(ll a,
intb)
intmain()
}printf("%d
",ans);
}
2017北京國慶刷題Day7 afternoon
期望得分 100 30 100 230 實際得分 60 30 100 190 排序去重 固定右端點,左端點單調不減 考場上用了二分,沒去重,60 記錄所有子集的最後出現位置 對於每個ai,列舉ai的子集,若最後出現位置 列舉子集複雜度 for int s 1 s for int i s i i i ...
LeetCode刷題之旅(Day4)
給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1,3 nums2 2 則中位數是 2.0 示例 2 nums1 1,2 ...
牛客網刷題day4
1.下列 中的錯誤是 d 1 public class test 2 8 a.非法的表示式 i 1 b.找不到符號i c.類不應為public d.尚未初始化變數i 解析 在方法內定義的變數在使用之前必須初始化,否則報錯。3.在資料報網路中,每個分組攜帶有目的地主機的位址。a a.是b.否 解析 資...