Submission #1609309


Source Code Expand

#pragma region include
#include <iostream>
#include <iomanip>
#include <stdio.h>

#include <sstream>
#include <algorithm>
#include <iterator>
#include <cmath>
#include <complex>

#include <string>
#include <cstring>
#include <vector>
#include <tuple>
#include <bitset>

#include <queue>
#include <complex>
#include <set>
#include <map>
#include <stack>
#include <list>

#include <fstream>
#include <random>
//#include <time.h>
#include <ctime>
#pragma endregion //#include
/////////
#define REP(i, x, n) for(int i = x; i < n; ++i)
#define rep(i,n) REP(i,0,n)
#define ALL(X) X.begin(), X.end()
/////////
#pragma region typedef
typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef std::pair<LL,LL> PLL;//
typedef std::pair<int,int> PII;//
#pragma endregion //typedef
////定数
const int INF = (int)1e9;
const LL MOD = (LL)1e9+7;
const LL LINF = (LL)1e18+20;
const LD PI = acos(-1.0);
const double EPS = 1e-9;
/////////
using namespace::std;
/////////
#pragma region Math
#pragma region
template<class T>
inline T gcd(T a, T b){return b ? gcd(b, a % b) : a;}
#pragma endregion // 最大公約数 gcd
#pragma region
template<class T>
inline T lcm(T a, T b){return a / gcd(a, b) * b;}
#pragma endregion // 最小公倍数 lcm
#pragma region
LL powMod(LL num,LL n,LL mod=(LL)MOD){//(num**n)%mod
	num %= mod;//
	if( n == 0 ){
		return (LL)1;
	}
	LL mul = num;
	LL ans = (LL)1;
	while(n){
		if( n&1 ){
			ans = (ans*mul)%mod;
		}
		mul = (mul*mul)%mod;
		n >>= 1;
	}
	return ans;
}
LL mod_inverse(LL num,LL mod=MOD){
	return powMod(num,MOD-2,MOD);
}
#pragma endregion //繰り返し二乗法 powMod

void solve(){
	LL a,b,c;
	cin >> a >> b >> c;
	/*
	if(a<=1000 && c<=1000 ){
		vector< vector<LL> > dp(c+1,vector<LL>(a));
		dp[0][0] = 1;
		for(int i=1;i<a;++i){
			dp[0][i] = (dp[0][i-1]*b ) % MOD;
		}
		for(int j=1;j<=c;++j){
			dp[j][0] = 1;
		}
		for(int j=1;j<=c;++j){
			for(int i=1;i<a;++i){
				dp[j][i] = (dp[j-1][i]+dp[j][i-1]);
				if( dp[j][i] >= MOD ){
					dp[j][i] -= MOD;
				}
			}
		}

		cout << dp[c][a-1] << endl;
	}else
	*/
	/*
	if( a <= 100000 && c <= 100000 ){
		const int F_MAX = 200010;
		vector<LL> fact(F_MAX);
		fact[0] = 1;
		for(LL i=1;i<F_MAX;++i){
			fact[i] = (fact[i-1]*i) % MOD;
		}
		//k!の逆元は
		//powMod(fact[k],MOD-2)で求める:フェルマーの小定理

		LL ans = 0;
		for(LL i=0;i<a;++i){
			//(c-1)+(a-i-1) C (c-1)
			LL n = (c-1)+(a-i-1);//2*10^5ある
			LL k = c-1;//固定値
			LL res = (fact[n]*powMod(fact[n-k],MOD-2)) % MOD;
			res = (res * powMod(fact[k],MOD-2) ) % MOD;
			res = (res * powMod(b,i) ) % MOD;
			ans += res;
			if( ans >= MOD ){
				ans -= MOD;
			}
		}
		cout << ans << endl;
	}
	*/
	LL ans = 0;
	LL res = 1;//最初の(c-1)C(c-1)
	LL N = c-1;
	LL R = c-1;
	for(LL i= a-1;i>=0;--i){
		ans = (ans + (res * powMod(b,i)) % MOD );
		if( ans >= MOD ){
			ans -= MOD;
		}
		++N;
		res = (res * N ) % MOD;
		res = (res * powMod(N-R,MOD-2) ) % MOD;
	}
	cout << ans << endl;
}

#pragma region main
signed main(void){
	std::cin.tie(0);
	std::ios::sync_with_stdio(false);
	std::cout << std::fixed;//小数を10進数表示
	cout << setprecision(16);//小数点以下の桁数を指定//coutとcerrで別	

	solve();
}
#pragma endregion //main()

Submission Info

Submission Time
Task F - Range Sum Queries
User akarin55
Language C++14 (GCC 5.4.1)
Score 100
Code Size 3395 Byte
Status AC
Exec Time 25 ms
Memory 256 KB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3
Score / Max Score 0 / 0 12 / 12 48 / 48 40 / 40
Status
AC × 3
AC × 12
AC × 21
AC × 30
Set Name Test Cases
Sample sample_1.txt, sample_2.txt, sample_3.txt
Subtask1 sample_1.txt, sample_2.txt, sample_3.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub1_5.txt, sub1_6.txt, sub1_7.txt, sub1_8.txt, sub1_9.txt
Subtask2 sample_1.txt, sample_2.txt, sample_3.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub1_5.txt, sub1_6.txt, sub1_7.txt, sub1_8.txt, sub1_9.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt, sub2_5.txt, sub2_6.txt, sub2_7.txt, sub2_8.txt, sub2_9.txt
Subtask3 sample_1.txt, sample_2.txt, sample_3.txt, sub1_1.txt, sub1_2.txt, sub1_3.txt, sub1_4.txt, sub1_5.txt, sub1_6.txt, sub1_7.txt, sub1_8.txt, sub1_9.txt, sub2_1.txt, sub2_2.txt, sub2_3.txt, sub2_4.txt, sub2_5.txt, sub2_6.txt, sub2_7.txt, sub2_8.txt, sub2_9.txt, sub3_1.txt, sub3_2.txt, sub3_3.txt, sub3_4.txt, sub3_5.txt, sub3_6.txt, sub3_7.txt, sub3_8.txt, sub3_9.txt
Case Name Status Exec Time Memory
sample_1.txt AC 1 ms 256 KB
sample_2.txt AC 1 ms 256 KB
sample_3.txt AC 1 ms 256 KB
sub1_1.txt AC 1 ms 256 KB
sub1_2.txt AC 1 ms 256 KB
sub1_3.txt AC 1 ms 256 KB
sub1_4.txt AC 1 ms 256 KB
sub1_5.txt AC 1 ms 256 KB
sub1_6.txt AC 1 ms 256 KB
sub1_7.txt AC 1 ms 256 KB
sub1_8.txt AC 1 ms 256 KB
sub1_9.txt AC 1 ms 256 KB
sub2_1.txt AC 14 ms 256 KB
sub2_2.txt AC 8 ms 256 KB
sub2_3.txt AC 13 ms 256 KB
sub2_4.txt AC 20 ms 256 KB
sub2_5.txt AC 18 ms 256 KB
sub2_6.txt AC 7 ms 256 KB
sub2_7.txt AC 25 ms 256 KB
sub2_8.txt AC 4 ms 256 KB
sub2_9.txt AC 2 ms 256 KB
sub3_1.txt AC 20 ms 256 KB
sub3_2.txt AC 1 ms 256 KB
sub3_3.txt AC 13 ms 256 KB
sub3_4.txt AC 17 ms 256 KB
sub3_5.txt AC 17 ms 256 KB
sub3_6.txt AC 25 ms 256 KB
sub3_7.txt AC 3 ms 256 KB
sub3_8.txt AC 24 ms 256 KB
sub3_9.txt AC 25 ms 256 KB