CF1423J Bubble Cup hypothesis 題解
阿新 • • 發佈:2021-08-08
Link.
Description.
求滿足 \(\sum_{i=0}^{+\infty}a_i2^i=m\) 且 \(\forall i\in\mathbb N,a_i\in[0,8)\) 的 \(\{a_i\}\) 數量。
Solution.
沒思路
首先,考慮這個 \(\forall i\in \mathbb N,a_i\in[0,8)\) 的限制。
眾所周知, \(8=2^3\),可以考慮按照 \(8\) 來分組,往 \(8\) 進位制那邊考慮。
設其分別為 \(x,y,z\)
發現如果 \(x,y,z\) 確定了,那 \(\{a_i\}\) 就確定了,因為它完全就是個八進位制。
題目意思轉化成了 \(x+2\cdot y+4\cdot z=m\) 的方案數。
\[\begin{aligned} res&=\sum_{4i\le m}\sum_{2j\le m-4i}1\\ &=\sum_{4i\le m}\left(\left\lfloor\frac{m-4i}{2}\right\rfloor+1\right)\\ &=\sum_{4i\le m}\left(\left\lfloor\frac{m}{2}\right\rfloor+1-2i\right)\\ &=\left(\left\lfloor\frac{m}{2}\right\rfloor+1\right)\cdot\left(\left\lfloor\frac{m}{4}\right\rfloor+1\right)-\left(\left\lfloor\frac{m}{4}\right\rfloor+1\right)\cdot\left\lfloor\frac{m}{4}\right\rfloor\\ \end{aligned} \]Coding.
點選檢視沒腦子程式碼
//是啊,你就是那隻鬼了,所以被你碰到以後,就輪到我變成鬼了{{{ #include<bits/stdc++.h> using namespace std;typedef long long ll; template<typename T>inline void read(T &x) { x=0;char c=getchar(),bz=0; for(;c<48||c>57;c=getchar()) if(!(c^45)) bz=1; for(;c>=48&&c<=57;c=getchar()) x=(x<<1)+(x<<3)+(c^48); bz?x=-x:x; }/*}}}*/ const int P=1e9+7; inline void solve() { ll n,x,y;read(n),x=n/2%P,y=n/4%P; printf("%lld\n",((x+1)*(y+1)%P-(y+1)*y%P+P)%P); } int main() {int Ca;for(read(Ca);Ca--;) solve();return 0;}