Submission #34841215


Source Code Expand

#include <bits/stdc++.h>
#include <atcoder/modint>
using mint = atcoder::modint998244353;
typedef long long ll;
#define MOD 998244353
#define rep(i,a,n) for (ll i=a;i<(ll)n;i++)
ll read(){ll r;scanf("%lld",&r);return r;} // read

const int N=16;
mint fac[20]={1};
mint f[1<<N]={1};
ll a[20];
ll lcm[1<<N] = {1}; // 如果过大 用 m+1表示
ll gcd(ll a,ll b){ return b==0?a:gcd(b,a%b);}
int c[1<<N] = {0};
int main(){
  int n = read();
  ll m = read();
  rep(i,0,n) a[i]=read();
  rep(i,1,n+1) fac[i]=fac[i-1]*i;
  rep(i,1,1<<n) c[i]=c[i&(i-1)]+1;
  rep(mask,1,1<<n){
    int p=__builtin_ctz(mask); // 最低位1的二的幂次
    int b=1<<p;
    ll u=lcm[mask^b];
    ll v=a[p];
    ll w=gcd(u,v);
    lcm[mask] = (u/w<=m/v)? u/w*v : (m+1); // 注意overflow 这里直接设置m+1 来避免overflow 而让结果 = 0
    // 非空子集遍历 包含最低位 dp[mask] = dp[mask0 not contain lowbit] * (g*h)(mask\mask0)
    for(int j=mask;j;j=(j-1)&mask) if(j&b) f[mask]+=f[mask^j]*fac[c[j]-1]*(m/lcm[j])*(c[j]&1?1:-1);
  }
  printf("%d\n",(f[(1<<n)-1]).val());
  return 0;
}

Submission Info

Submission Time
Task Ex - Distinct Multiples
User cromarmot
Language C++ (GCC 9.2.1)
Score 600
Code Size 1077 Byte
Status AC
Exec Time 371 ms
Memory 4748 KiB

Compile Error

./Main.cpp: In function ‘ll read()’:
./Main.cpp:7:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
    7 | ll read(){ll r;scanf("%lld",&r);return r;} // read
      |                ~~~~~^~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 600 / 600
Status
AC × 3
AC × 39
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt
All example_00.txt, example_01.txt, example_02.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt
Case Name Status Exec Time Memory
example_00.txt AC 8 ms 3832 KiB
example_01.txt AC 2 ms 3888 KiB
example_02.txt AC 2 ms 3960 KiB
test_00.txt AC 371 ms 4548 KiB
test_01.txt AC 369 ms 4664 KiB
test_02.txt AC 3 ms 3964 KiB
test_03.txt AC 139 ms 4220 KiB
test_04.txt AC 351 ms 4536 KiB
test_05.txt AC 351 ms 4540 KiB
test_06.txt AC 2 ms 3840 KiB
test_07.txt AC 2 ms 3836 KiB
test_08.txt AC 10 ms 3904 KiB
test_09.txt AC 2 ms 3940 KiB
test_10.txt AC 2 ms 4024 KiB
test_11.txt AC 2 ms 3932 KiB
test_12.txt AC 25 ms 3972 KiB
test_13.txt AC 12 ms 3948 KiB
test_14.txt AC 346 ms 4636 KiB
test_15.txt AC 344 ms 4664 KiB
test_16.txt AC 348 ms 4636 KiB
test_17.txt AC 344 ms 4748 KiB
test_18.txt AC 52 ms 3972 KiB
test_19.txt AC 10 ms 3904 KiB
test_20.txt AC 25 ms 3996 KiB
test_21.txt AC 10 ms 3860 KiB
test_22.txt AC 6 ms 3944 KiB
test_23.txt AC 2 ms 4044 KiB
test_24.txt AC 348 ms 4684 KiB
test_25.txt AC 346 ms 4544 KiB
test_26.txt AC 4 ms 3960 KiB
test_27.txt AC 2 ms 3892 KiB
test_28.txt AC 343 ms 4668 KiB
test_29.txt AC 6 ms 3968 KiB
test_30.txt AC 21 ms 3884 KiB
test_31.txt AC 2 ms 3980 KiB
test_32.txt AC 3 ms 3940 KiB
test_33.txt AC 4 ms 3980 KiB
test_34.txt AC 350 ms 4672 KiB
test_35.txt AC 342 ms 4748 KiB