Submission #3774943
Source Code Expand
#include "bits/stdc++.h"
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <map>
#include <vector>
#include <math.h>
#include <algorithm>
#include <queue>
#include <set>
#include <tuple>
using namespace std;
#define FOR(i,init,a) for(int i=init; i<a; i++)
#define rep(i,a) FOR(i,0,a)
#define rrep(i,a) for(int i=a; i>=0; i--)
#define rep1(i,a) for(int i=1; i<=a; i++)
#define cout1(a) cout << a << endl;
#define cout2(a,b) cout << a << " " << b << endl;
#define cout3(a,b,c) cout << a << " " << b << " " << c << endl;
#define cout4(a,b,c,d) cout << a << " " << b << " " << c << " " << d << endl;
#define mem(a,n) memset( a, n, sizeof(a))
#define all(a) a.begin(),a.end()
#define chmin(a,b) a=min(a,b);
#define chmax(a,b) a=max(a,b);
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef vector<int> V;
typedef vector<V> VV;
typedef vector<VV> VVV;
const int INF = 1e9;
const int MOD = 1e9+7;
const ll LLINF = 1e18;
static const double pi = 3.141592653589793;
ll fact[200000], invFact[200000], memo[1009];
long long power(long long x, long long c) {
if(c==0) return 1;
if(c==1) return x;
if (c%2==1) return (power( (x*x)%MOD, c/2)*x)%MOD;
else return power( (x*x)%MOD, c/2)%MOD;
}
void make_combT(ll n){
fact[0]=1;
rep1(i,n) fact[i]= fact[i-1]*i%MOD;
invFact[n] = power(fact[n],MOD-2);
rrep(i,n-1) invFact[i] = invFact[i+1] * (i+1) %MOD;
}
ll comb(ll n, ll m){
if(n<m||n<0||m<0) return 0;
return (fact[n] * invFact[m] %MOD) * invFact[n-m] %MOD;
}
ll inv(int k){
if(memo[k]) return memo[k];
return memo[k]=power(k,MOD-2);
}
ll dp[1009][1009];
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
make_combT(1009);
int N,A,B,C,D;
cin>>N>>A>>B>>C>>D;
rep(i,1009) dp[i][0]=1;
for(int i=A;i<=B;i++){
rep(j,N+1)if(dp[i][j]){
if(j) (dp[i+1][j]+=dp[i][j])%=MOD;
ll p=1;
for(int k=1;k<=D&&j+i*k<=N;k++){
p=(((p*comb(N-j-i*(k-1),i)%MOD)*inv(k))%MOD)%MOD;
if(k>=C) (dp[i+1][j+i*k]+=(dp[i][j]*p)%MOD)%=MOD;
}
}
}
cout1(dp[B+1][N])
}
Submission Info
Submission Time |
|
Task |
E - Grouping |
User |
mensan_fukuhara |
Language |
C++14 (GCC 5.4.1) |
Score |
600 |
Code Size |
2261 Byte |
Status |
AC |
Exec Time |
57 ms |
Memory |
10496 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
600 / 600 |
Status |
|
|
Set Name |
Test Cases |
Sample |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt |
All |
sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt, subtask_1_many_01.txt, subtask_1_many_02.txt, subtask_1_many_03.txt, subtask_1_many_04.txt, subtask_1_max_01.txt, subtask_1_max_02.txt, subtask_1_min_01.txt, subtask_1_randa_01.txt, subtask_1_randa_02.txt, subtask_1_randb_01.txt, subtask_1_randb_02.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
4 ms |
9472 KB |
sample_02.txt |
AC |
4 ms |
9472 KB |
sample_03.txt |
AC |
57 ms |
10496 KB |
sample_04.txt |
AC |
4 ms |
9472 KB |
subtask_1_many_01.txt |
AC |
37 ms |
9728 KB |
subtask_1_many_02.txt |
AC |
48 ms |
10496 KB |
subtask_1_many_03.txt |
AC |
38 ms |
9856 KB |
subtask_1_many_04.txt |
AC |
48 ms |
10496 KB |
subtask_1_max_01.txt |
AC |
4 ms |
9472 KB |
subtask_1_max_02.txt |
AC |
4 ms |
9472 KB |
subtask_1_min_01.txt |
AC |
4 ms |
9472 KB |
subtask_1_randa_01.txt |
AC |
4 ms |
9472 KB |
subtask_1_randa_02.txt |
AC |
4 ms |
9472 KB |
subtask_1_randb_01.txt |
AC |
5 ms |
9600 KB |
subtask_1_randb_02.txt |
AC |
4 ms |
9600 KB |