题目
一个 $A$ 每天可以生产 $x1$ 个 $B$,$y1$ 个 $C$,一个 $B$ 每天可以生产 $x2$ 个 $A$,$y2$ 个 $C$,一个 $C$ 每天可以生产 $x3$ 个 $A$,$y3$ 个 $B$,最开始各有 $x,y,z$ 个,问 $n$ 天后各有多少个? $n = 1e9$
Solution
$B$ 和 $C$ 每天可以生产 $x2 + x3$ 个 $A$,那么第一天:$x$,第二天:$x(x2+x3)$,第三天:$(x(x2+x3))*(x2+x3)$ … 显然是等比数列求和。
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1e9 + 7; ll x, y, z, n, b1, c1, a1, c2, a2, b2;
ll qp(ll a, ll b) { ll sum = 1; while (b) { if (b & 1) sum = sum * a % mod; a = a * a % mod; b >>= 1; } return sum; }
int main() { cin >> x >> y >> z >> n; cin >> b1 >> c1 >> a1 >> c2 >> a2 >> b2; ll a = x * (1 - qp(a1 + a2, n + 1) + mod) * qp(1 - a1 - a2 + mod, mod - 2) % mod; ll b = y * (1 - qp(b1 + b2, n + 1) + mod) * qp(1 - b1 - b2 + mod, mod - 2) % mod; ll c = z * (1 - qp(c1 + c2, n + 1) + mod) * qp(1 - c1 - c2 + mod, mod - 2) % mod; cout << a << " " << b << " " << c << endl; return 0; }
|