试从0 ~ N-1中取出X个数 , 使其和为C。
好吧这玩意是有一道CF的题乱搞不出来的副产品。
题目传送门 http://codeforces.com/contest/709/problem/D
题解传送门 http://blog.csdn.net/ceerrep/article/details/52314378
好吧就是想不出来然后一通乱搞,
a 00 = ∑ A [ i ] = 0 ( d 0 [ i − 1 ] ) a00=\sum_{A[i]=0}(d_0[i-1]) a00=A[i]=0∑(d0[i−1])
a 01 = ∑ A [ i ] = 1 ( d 0 [ i − 1 ] ) a01=\sum_{A[i]=1}(d_0[i-1]) a01=A[i]=1∑(d0[i−1])
a 10 = ∑ A [ i ] = 0 ( d 1 [ i − 1 ] ) a10=\sum_{A[i]=0}(d_1[i-1]) a10=A[i]=0∑(d1[i−1])
a 11 = ∑ A [ i ] = 1 ( d 1 [ i − 1 ] ) a11=\sum_{A[i]=1}(d_1[i-1]) a11=A[i]=1∑(d1[i−1])
然后推出了这个
a 01 + a 11 = ∑ A [ i ] = 1 ( i − 1 ) a01+a11=\sum_{A[i]=1}(i-1) a01+a11=A[i]=1∑(i−1)
( a 10 + a 00 a10+a00 a10+a00同理)
上面那个式子就是
0
∼
N
−
1
0 \sim N-1
0∼N−1中选出X个数的和。
且
a
11
=
X
∗
(
X
−
1
)
/
2
a11=X*(X-1)/2
a11=X∗(X−1)/2 ,
a
00
=
(
N
−
X
)
∗
(
N
−
X
−
1
)
/
2
a00=(N-X)*(N-X-1)/2
a00=(N−X)∗(N−X−1)/2
这样可以算出
{
a
00
,
a
01
,
a
10
,
a
11
}
\{a00,a01,a10,a11\}
{a00,a01,a10,a11}
然后应该就跟题解里一样算了(大概吧)……