結果
問題 | No.2952 Invision of Multiples |
ユーザー |
|
提出日時 | 2024-07-17 22:53:55 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 1,055 bytes |
コンパイル時間 | 5,745 ms |
コンパイル使用メモリ | 312,080 KB |
実行使用メモリ | 28,132 KB |
最終ジャッジ日時 | 2024-09-13 16:10:34 |
合計ジャッジ時間 | 50,732 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 TLE * 1 -- * 4 |
ソースコード
#include<bits/stdc++.h>using namespace std;#include<atcoder/all>using namespace atcoder;using mint=atcoder::modint998244353;const int B=30;const int M=100000;mint sum[B+1],sum2[B+1];// n>d_imint floor_sums[M+1][B+1];// d_i>nmint floor_sums2[M+1][B+1];int main(){cin.tie(nullptr),ios_base::sync_with_stdio(false);int n,m;cin>>n>>m;vector<int> a(n);for(auto&e:a)cin>>e;mint X=1;for(auto&e:a)X*=m/e;for(int i=1;i<=M;i++){for(int j=1;j<=B;j++){floor_sums[i][j]=floor_sum(m/j,i,j,j-1);floor_sums2[i][j]=floor_sum(m/i,j,i,i-1);}}mint ans=0;fenwick_tree<mint> f(M+1);for(auto&e:a){if(e<=B){ans+=sum2[e];for(int i=1;i<=B;i++){ans+=sum[i]*floor_sums[e][i]/(m/e);}sum[e]+=X/(m/e);}else{for(int i=1;i<=B;i++){ans+=sum[i]*floor_sums[e][i]/(m/e);}for(int i=e;i<=m;i+=e){ans+=f.sum(i+1,m+1)/(m/e);}for(int i=1;i<=B;i++){sum2[i]+=X/(m/e)/(m/i)*floor_sums2[e][i];}for(int i=e;i<=M;i+=e){f.add(i,X/(m/e));}}}cout<<ans.val()<<endl;}