Submission #1155796


Source Code Expand

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)



int mod = 1000000007;
int add(int x, int y) { return (x += y) >= mod ? x - mod : x; }
template<class... T> int add(int x, T... y) { return add(x, add(y...)); }
int mul(int x, int y) { return 1LL * x * y % mod; }
template<class... T> int mul(int x, T... y) { return mul(x, mul(y...)); }
int sub(int x, int y) { return add(x, mod - y); }
int modpow(int a, long long b) {
	int ret = 1;
	while (b > 0) {
		if (b & 1) ret = 1LL * ret * a % mod;
		a = 1LL * a * a % mod; b >>= 1;
	}
	return ret;
}
int modinv(int a) { return modpow(a, mod - 2); }
//-----------------------------------------------------------------
int N, A[101010];
int mu[101010];
void pre() {
	mu[0] = 1;
	rep(i, 1, N + 1) mu[i] = mul(mu[i - 1], A[i]);
}
int pat(int L, int R) {
	return mul(mu[R], modinv(mu[L - 1]), modpow(2, max(0, L - 2) + max(0, N - R - 1)));
}
//-----------------------------------------------------------------
int dp[101010];
int main() {
	cin >> N;
	rep(i, 1, N + 1) scanf("%d", &A[i]);

	pre();

	/* Naive ********************************
	int ans = 0;
	rep(L, 1, N + 1) rep(R, L, N + 1) ans = add(ans, pat(L, R));
	cout << ans << endl;
	*/

	dp[1] = 0;
	rep(R, 1, N + 1) dp[1] = add(dp[1], pat(1, R));
	rep(i, 1, N) { // dp[i]からdp[i + 1]を計算する
		dp[i + 1] = sub(dp[i], pat(i,i));
		dp[i + 1] = mul(dp[i + 1], modinv(A[i]));
		if (i != 1) dp[i + 1] = mul(dp[i + 1], 2);
	}

	int ans = 0;
	rep(i, 1, N + 1) ans = add(ans, dp[i]);
	cout << ans << endl;
}

Submission Info

Submission Time
Task F - 数列と計算
User hamayanhamayan
Language C++14 (GCC 5.4.1)
Score 100
Code Size 1598 Byte
Status AC
Exec Time 243 ms
Memory 1408 KB

Compile Error

./Main.cpp: In function ‘int main()’:
./Main.cpp:36:37: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
  rep(i, 1, N + 1) scanf("%d", &A[i]);
                                     ^

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 3
AC × 14
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, sample_01.txt, sample_02.txt, sample_03.txt
Case Name Status Exec Time Memory
01.txt AC 1 ms 256 KB
02.txt AC 1 ms 256 KB
03.txt AC 1 ms 256 KB
04.txt AC 243 ms 1408 KB
05.txt AC 243 ms 1408 KB
06.txt AC 243 ms 1408 KB
07.txt AC 243 ms 1408 KB
08.txt AC 243 ms 1408 KB
sample_01.txt AC 1 ms 256 KB
sample_02.txt AC 1 ms 256 KB
sample_03.txt AC 1 ms 256 KB