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 |
|
|
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 |