Submission #1517986


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define FOR(i, j, k) for(int i=j; i<=k; i++)
#define FFOR(i, j, k) for(int i=j; i<k; i++)
#define DFOR(i, j, k) for(int i=j; i>=k; i--)
#define bug(x) cerr<<#x<<" = "<<x<<'\n'
#define pb push_back
#define mp make_pair
typedef long long ll;
typedef long double ld;
template <typename T> inline void read(T &x){
    char c;
    bool nega=0;
    while((!isdigit(c=getchar()))&&(c!='-'));
    if(c=='-'){
        nega=1;
        c=getchar();
    }
    x=c-48;
    while(isdigit(c=getchar())) x=x*10+c-48;
    if(nega) x=-x;
}
template <typename T> inline void writep(T x){
    if(x>9) writep(x/10);
    putchar(x%10+48);
}
template <typename T> inline void write(T x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    writep(x);
}
template <typename T> inline void writeln(T x){
    write(x);
    putchar('\n');
}
#define taskname "E"
const ll base=1000000007;
ll f[1001][1001];
ll h[1001][1001];
ll nt[1001][1001];
ll fact[1001];
bool done[1001][1001];
bool doneh[1001][1001];
ll F(int, int);
ll power(ll a, int x){
    if(x==0) return 1;
    ll t=power(a, x/2);
    t=(t*t)%base;
    if(x%2) t=(t*a)%base;
    return t;
}
int n, a, b, c, d;
ll H(int u, int v){
    if(doneh[u][v]) return h[u][v];
    doneh[u][v]=1;
    return h[u][v]=(fact[u*v]*power((fact[v]*power(fact[u], v))%base, base-2))%base;
}
//ll G(int u, int v){
//    if(u<0) return 0;
//    if(doneg[u][v]) return g[u][v];
//    doneg[u][v]=1;
//    return g[u][v]=(F(u, v)+G(u-v-1, v))%base;
//}
ll F(int u, int v){
//    write(u);
//    putchar(' ');
//    write(v);
    if(done[u][v]) return f[u][v];
    done[u][v]=1;
    if(u==0) return f[u][v]=1;
    if(v<a) return f[u][v]=0;
    f[u][v]=F(u, v-1);
    FOR(i, c, d) if(i*v<=u) f[u][v]=((F(u-i*v, v-1)*((nt[u][i*v]*H(v, i))%base))%base+f[u][v])%base;
    else break;
    f[u][v]%=base;
    return f[u][v];
}
int main(){
    #ifdef Megumin
        if(fopen(taskname".inp", "r"))
            freopen(taskname".inp", "r", stdin);
    #endif // Megumin
    fact[0]=1;
    FOR(i, 1, 1000) fact[i]=(fact[i-1]*i)%base;
    nt[0][0]=1;
    FOR(i, 1, 1000){
        nt[i][0]=nt[i][i]=1;
        FFOR(j, 1, i) nt[i][j]=(nt[i-1][j]+nt[i-1][j-1])%base;
    }
    read(n);
    read(a);
    read(b);
    read(c);
    read(d);
    writeln(F(n, b));
    FOR(i, 1, n) FOR(j, 1, n) if(f[i][j]<0) bug(f[i][j]);
}

Submission Info

Submission Time
Task E - Grouping
User johntitor
Language C++14 (GCC 5.4.1)
Score 600
Code Size 2465 Byte
Status AC
Exec Time 53 ms
Memory 25344 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 4
AC × 15
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 10496 KB
sample_02.txt AC 4 ms 10496 KB
sample_03.txt AC 53 ms 25344 KB
sample_04.txt AC 4 ms 10496 KB
subtask_1_many_01.txt AC 38 ms 20224 KB
subtask_1_many_02.txt AC 27 ms 20352 KB
subtask_1_many_03.txt AC 37 ms 20224 KB
subtask_1_many_04.txt AC 33 ms 20480 KB
subtask_1_max_01.txt AC 6 ms 14976 KB
subtask_1_max_02.txt AC 5 ms 12800 KB
subtask_1_min_01.txt AC 4 ms 10496 KB
subtask_1_randa_01.txt AC 4 ms 10624 KB
subtask_1_randa_02.txt AC 4 ms 10496 KB
subtask_1_randb_01.txt AC 6 ms 16896 KB
subtask_1_randb_02.txt AC 5 ms 14848 KB