显示原始代码
#include <iostream>
#include <vector>
using namespace std;
void calculatePrefixSuffixSums(const vector<int>& a, vector<int>& prefixSum, vector<int>& suffixSum) {
int n = a.size();
prefixSum[0] = a[0];
for (int i = 1; i < n; ++i) {
prefixSum[i] = prefixSum[i - 1] + a[i];
}
suffixSum[n - 1] = a[n - 1];
for (int i = n - 2; i >= 0; --i) {
suffixSum[i] = suffixSum[i + 1] + a[i];
}
}
void calculatePrefixSuffixProducts(const vector<int>& a, vector<long long>& prefixProduct,
vector<long long>& suffixProduct, const int MOD) {
int n = a.size();
prefixProduct[0] = a[0];
for (int i = 1; i < n; ++i) {
prefixProduct[i] = (prefixProduct[i - 1] * a[i]) % MOD;
}
suffixProduct[n - 1] = a[n - 1];
for (int i = n - 2; i >= 0; --i) {
suffixProduct[i] = (suffixProduct[i + 1] * a[i]) % MOD;
}
}
int main() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i]; }
const int MOD = 1000000007;
vector<int> prefixSum(n), suffixSum(n);
vector<long long> prefixProduct(n), suffixProduct(n);
calculatePrefixSuffixSums(a, prefixSum, suffixSum);
calculatePrefixSuffixProducts(a, prefixProduct, suffixProduct, MOD);
for (int i = 0; i < n; ++i) {
int Ai = (i > 0 ? prefixSum[i - 1] : 0) - (i < n - 1 ? suffixSum[i + 1] : 0);
long long Bi = (i > 0 ? prefixProduct[i - 1] : 1) * (i < n - 1 ? suffixProduct[i + 1] : 1) % MOD;
cout << Ai << " " << Bi << endl;
}
return 0;
}