每日一题:物质分裂

题目

一个 $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;
}
作者

Benboby

发布于

2020-08-27

更新于

2021-01-28

许可协议

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×