Submission #1220231
Source Code Expand
#include <iostream>
#include <vector>
using namespace std;
// template for creating 2d vector
template<typename T>
vector<vector<T>> make_2d_vector(size_t rows, size_t cols, T init)
{ return vector< vector<T> >(rows, vector<T>(cols, init)); }
#define debug(x) cout << #x << "==" << x << endl;
typedef long long ll;
int N, A, B, C, D;
const int inf = 1e+8;
const int mod = 1e+9 + 7;
typedef long long ll;
#define MAX_N 1001
ll pow(ll a, int b){
int ret = 1;
while(b){
if(b & 1) ret = (1ll) * ret * a % mod;
b >>= 1;
a = (1ll) * a * a % mod;
}
return ret;
}
inline ll add(ll a, ll b) { return (a + b) % mod; }
inline ll sub(ll a, ll b) { return (a - b + mod) % mod; }
inline ll mul(ll a, ll b) { return (a * b) % mod; }
inline ll div(ll a, ll b) { return mul( a, pow(b, mod-2) ); }
ll fact[MAX_N+1], fact_inv[MAX_N+1];
void create_fact() {
fact[0] = 1;
fact_inv[0] = 1;
for(int i = 1; i < MAX_N; i++) {
fact[i] = mul(fact[i-1], i);
fact_inv[i] = pow(fact[i], mod - 2);
}
}
ll nPk(int n, int k) {
// n! / (n-r)!
return mul(fact[n], fact_inv[n-k]);
}
int memo[1001][1001];
bool checked[1001][1001];
ll rec(int g, int i) {
// debug(g); debug(i);
if( checked[g][i] ) return memo[g][i];
if( i == 0 ) return 1;
if( g == 0 ) return 0;
ll res = 0;
// g人グループを使わない
// cout << g-1 << "," << i << "\n";
res += rec( g-1, i);
// g人グループを使えない
if( g < A or g > B ) {
return res;
}
// g人グループを使える
for(ll k = C; k <= D; k++) {
if( k*g <= i ) {
ll comb = nPk(i, k*g);
comb = mul(comb, pow(fact_inv[g], k) );
comb = mul(comb, fact_inv[k] );
res = add(res, mul(comb, rec( g-1, i-k*g )));
}
}
checked[g][i] = true;
memo[g][i] = res;
return res;
}
int main() {
ios::sync_with_stdio(false);
create_fact();
cin >> N >> A >> B >> C >> D;
vector<int> a(N);
for(int i = 0; i < N; i++) { cin >> a[i]; }
cout << rec( B, N );
// debug( rec( 2,3) );
// debug( rec( 2,0) );
return 0;
}
Submission Info
Submission Time |
|
Task |
E - Grouping |
User |
sadtomato |
Language |
C++14 (GCC 5.4.1) |
Score |
600 |
Code Size |
2205 Byte |
Status |
AC |
Exec Time |
445 ms |
Memory |
5248 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 |
1 ms |
256 KB |
sample_02.txt |
AC |
1 ms |
256 KB |
sample_03.txt |
AC |
445 ms |
5248 KB |
sample_04.txt |
AC |
1 ms |
256 KB |
subtask_1_many_01.txt |
AC |
132 ms |
640 KB |
subtask_1_many_02.txt |
AC |
95 ms |
4992 KB |
subtask_1_many_03.txt |
AC |
131 ms |
640 KB |
subtask_1_many_04.txt |
AC |
133 ms |
3840 KB |
subtask_1_max_01.txt |
AC |
11 ms |
3072 KB |
subtask_1_max_02.txt |
AC |
4 ms |
2432 KB |
subtask_1_min_01.txt |
AC |
1 ms |
256 KB |
subtask_1_randa_01.txt |
AC |
2 ms |
3072 KB |
subtask_1_randa_02.txt |
AC |
1 ms |
512 KB |
subtask_1_randb_01.txt |
AC |
2 ms |
2944 KB |
subtask_1_randb_02.txt |
AC |
2 ms |
896 KB |