Submission #2069265


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
#define _MACRO(_1, _2, _3, NAME, ...) NAME
#define _repl(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define _rep(i,n) _repl(i,0,n)
#define rep(...) _MACRO(__VA_ARGS__, _repl, _rep)(__VA_ARGS__)
#define mp make_pair
#define pb push_back
#define all(x) begin(x),end(x)
#define uniq(x) sort(all(x)),(x).erase(unique(all(x)),end(x))
#define fi first
#define se second
#define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
void _dbg(string){cerr<<endl;}
template<class H,class... T> void _dbg(string s,H h,T... t){int l=s.find(',');cerr<<s.substr(0,l)<<" = "<<h<<", ";_dbg(s.substr(l+1),t...);}
template<class T,class U> ostream& operator<<(ostream &o, const pair<T,U> &p){o<<"("<<p.fi<<","<<p.se<<")";return o;}
template<class T> ostream& operator<<(ostream &o, const vector<T> &v){o<<"[";for(T t:v){o<<t<<",";}o<<"]";return o;}

#define INF 1120000000
#define MOD 1000000007

// x^n mod p
long mod_pow(long x, long n, long p=MOD){
  if(x==0) return 0;
  long res=1;
  x %= p;
  while(n>0){
    if(n&1) res=res*x%p;
    x=x*x%p;
    n>>=1;
  }
  return res;
}
inline long mod_inv(long x, long p=MOD){ return mod_pow(x%p, p-2, p); }

long tbl[305][305][155];
long fact[400];
long finv[400];

int main(){
  fact[0] = 1;
  rep(i,305) fact[i+1] = (i+1)*fact[i] %MOD;
  rep(i,305) finv[i] = mod_inv(fact[i]);

  int n,x,y,z;
  cin>>n>>x>>y>>z;

  if(x+y+z < n){
    cout << 0 << endl;
    return 0;
  }

  rep(c1,301) rep(c2,301) rep(c3,151){
    long &v = tbl[c1][c2][c3];
    if(c1+c2<=c3) v = finv[c1] %MOD * finv[c2] %MOD * finv[c3-c1-c2] %MOD;
    else v = 0;
    if(c1>0) v += tbl[c1-1][c2][c3];
    if(c2>0) v += tbl[c1][c2-1][c3];
    if(c1>0 && c2>0) v -= tbl[c1-1][c2-1][c3];
    v %= MOD;
    if(v < 0) v += MOD;
  }

  long ans = 0;
  rep(i,x+1) rep(j,y+1) rep(k,z+1){
    for(int l=0; i+j+k+l<=n && i+j+l<=x+y; l++){
      int c1 = y+z-j-k;
      int c2 = x+z-i-k;
      int c3 = n-i-j-k-l;
      long sel = fact[n] * finv[i] %MOD * finv[j] %MOD * finv[k] %MOD * finv[l] %MOD;
      ans += sel * tbl[c1][c2][c3] %MOD;
    }
  }

  cout << ans %MOD << endl;

  return 0;
}

Submission Info

Submission Time
Task F - 就職活動
User tossy
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2194 Byte
Status AC
Exec Time 179 ms
Memory 112896 KB

Judge Result

Set Name Sample Subtask1 Subtask2
Score / Max Score 0 / 0 25 / 25 75 / 75
Status
AC × 4
AC × 20
AC × 26
Set Name Test Cases
Sample 00-sample-00.txt, 00-sample-01.txt, 00-sample-02.txt, 00-sample-03.txt
Subtask1 01-small-04.txt, 01-small-05.txt, 01-small-06.txt, 01-small-07.txt, 01-small-08.txt, 01-small-09.txt, 01-small-10.txt, 01-small-11.txt, 01-small-12.txt, 01-small-13.txt, 01-small-14.txt, 01-small-15.txt, 01-small-16.txt, 01-small-17.txt, 01-small-18.txt, 01-small-19.txt, 01-small-20.txt, 00-sample-00.txt, 00-sample-01.txt, 00-sample-02.txt
Subtask2 02-large-21.txt, 02-large-22.txt, 02-large-23.txt, 02-large-24.txt, 02-large-25.txt, 02-large-26.txt, 02-large-27.txt, 02-large-28.txt, 02-large-29.txt, 02-large-30.txt, 02-large-31.txt, 02-large-32.txt, 02-large-33.txt, 02-large-34.txt, 02-large-35.txt, 02-large-36.txt, 02-large-37.txt, 02-large-38.txt, 02-large-39.txt, 02-large-40.txt, 02-large-41.txt, 02-large-42.txt, 02-large-43.txt, 02-large-44.txt, 02-large-45.txt, 00-sample-03.txt
Case Name Status Exec Time Memory
00-sample-00.txt AC 78 ms 112896 KB
00-sample-01.txt AC 78 ms 112896 KB
00-sample-02.txt AC 78 ms 112896 KB
00-sample-03.txt AC 78 ms 112896 KB
01-small-04.txt AC 78 ms 112896 KB
01-small-05.txt AC 78 ms 112896 KB
01-small-06.txt AC 78 ms 112896 KB
01-small-07.txt AC 78 ms 112896 KB
01-small-08.txt AC 78 ms 112896 KB
01-small-09.txt AC 78 ms 112896 KB
01-small-10.txt AC 78 ms 112896 KB
01-small-11.txt AC 78 ms 112896 KB
01-small-12.txt AC 78 ms 112896 KB
01-small-13.txt AC 78 ms 112896 KB
01-small-14.txt AC 78 ms 112896 KB
01-small-15.txt AC 78 ms 112896 KB
01-small-16.txt AC 78 ms 112896 KB
01-small-17.txt AC 78 ms 112896 KB
01-small-18.txt AC 78 ms 112896 KB
01-small-19.txt AC 1 ms 256 KB
01-small-20.txt AC 1 ms 256 KB
02-large-21.txt AC 78 ms 112896 KB
02-large-22.txt AC 78 ms 112896 KB
02-large-23.txt AC 173 ms 112896 KB
02-large-24.txt AC 83 ms 112896 KB
02-large-25.txt AC 121 ms 112896 KB
02-large-26.txt AC 154 ms 112896 KB
02-large-27.txt AC 125 ms 112896 KB
02-large-28.txt AC 132 ms 112896 KB
02-large-29.txt AC 162 ms 112896 KB
02-large-30.txt AC 107 ms 112896 KB
02-large-31.txt AC 121 ms 112896 KB
02-large-32.txt AC 109 ms 112896 KB
02-large-33.txt AC 128 ms 112896 KB
02-large-34.txt AC 179 ms 112896 KB
02-large-35.txt AC 88 ms 112896 KB
02-large-36.txt AC 164 ms 112896 KB
02-large-37.txt AC 80 ms 112896 KB
02-large-38.txt AC 146 ms 112896 KB
02-large-39.txt AC 124 ms 112896 KB
02-large-40.txt AC 175 ms 112896 KB
02-large-41.txt AC 125 ms 112896 KB
02-large-42.txt AC 176 ms 112896 KB
02-large-43.txt AC 96 ms 112896 KB
02-large-44.txt AC 112 ms 112896 KB
02-large-45.txt AC 126 ms 112896 KB