結果
問題 | No.2952 Invision of Multiples |
ユーザー |
|
提出日時 | 2024-09-13 22:46:05 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,160 ms / 4,000 ms |
コード長 | 1,099 bytes |
コンパイル時間 | 5,645 ms |
コンパイル使用メモリ | 314,540 KB |
実行使用メモリ | 24,036 KB |
最終ジャッジ日時 | 2024-09-13 22:46:23 |
合計ジャッジ時間 | 17,834 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
#include<bits/stdc++.h>using namespace std;#include<atcoder/all>using namespace atcoder;using mint=atcoder::modint998244353;mint inv[50009];int main(){int n,m;cin>>n>>m;vector<int> d(n);for(auto&&e:d)cin>>e;for(int i=1;i<=m;i++)inv[i]=mint(i).inv();const int B=50;vector<mint> cnt;vector<vector<mint>> cnt1(B+1,vector<mint>(m+1));vector<vector<mint>> cnt2(B+1,vector<mint>(m+1));for(int i=0;i<2;i++){cnt.assign(B+1,0);for(auto&&e:d){if(e>B||!i){for(int j=1;j<=B;j++){cnt1[j][e]+=cnt[j];}}if(e<=B){cnt[e]++;}}reverse(d.begin(),d.end());swap(cnt1,cnt2);}mint ans=0;fenwick_tree<mint> ft(m+1);for(auto&&e:d){if(e<=B)continue;for(int i=e;i<=m;i+=e){ans+=ft.sum(i+1,m+1)*inv[m/e];ft.add(i,inv[m/e]);}}for(int i=1;i<=B;i++){for(int j=1;j<=m;j++){if(cnt1[i][j].val()){ans+=inv[m/i]*inv[m/j]*cnt1[i][j]*floor_sum(m/i,j,i,i-1);}if(cnt2[i][j].val()){ans+=inv[m/i]*inv[m/j]*cnt2[i][j]*floor_sum(m/j,i,j,j-1);}}}for(auto&&e:d)ans*=m/e;cout<<ans.val()<<endl;}