ABC233 C - Product ~map解法~

code

int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);

    // input
    ll N,X;
    cin>>N>>X;

    map<ll,ll> mp;
    mp[1]=1; // 何もかけていない状態(数値1)は現在1通り

    rep(i,N){
      ll L;cin>>L;
      map<ll,ll> mp2;
      rep(j,L){
        ll a;cin>>a;
        for(auto pa : mp){
          ll v = pa.first;
          ll cnt = pa.second;
          if((ld)v*a>X)continue; // 積がオーバーフローするものは除去
          mp2[v*a] += cnt;
        }
      }
      mp=mp2;
    }

    p(mp[X]);

    return 0;
}