思路:
其实这个矩阵的行列式是有规律的,将1阶,2阶,3阶手动计算出来过后。
我们会发现一个规律,D = (a1 * b1 + a2 * b2+ … + an * bn) * xn-1 + xn.
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD = 1e9 + 7;
const int MAXN = 1e5 + 5;
ll a[MAXN], b[MAXN];
ll fast_power(ll a, ll b) {
ll ans=1;
while (b > 0) {
if(b & 1) {
ans = ans * a % MOD;
}
a = a * a % MOD;
b >>= 1;
}
return ans;
}
void solve() {
ll n, x;
while(~scanf("%lld%lld", &n, &x)) {
for (int i = 0; i < n; ++i) {
scanf("%lld", &a[i]);
}
for (int i = 0; i < n; ++i) {
scanf("%lld", &b[i]);
}
ll ans = 0;
for (int i = 0; i < n; ++i) {
ans = (ans + a[i] * b[i] % MOD) % MOD;
}
ans = (ans * fast_power(x, n - 1) % MOD + fast_power(x, n) % MOD) % MOD;
printf("%lld\n", ans);
}
}
int main() {
solve();
return 0;
}