結果
| 問題 |
No.2952 Invision of Multiples
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2024-10-25 22:55:26 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,481 bytes |
| コンパイル時間 | 4,649 ms |
| コンパイル使用メモリ | 257,748 KB |
| 最終ジャッジ日時 | 2025-02-24 23:43:57 |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | WA * 8 TLE * 1 -- * 32 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:32:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
32 | rep(i,N)scanf("%d",&a[i]);
| ~~~~~^~~~~~~~~~~~
ソースコード
#include <stdio.h>
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 1000000000000000000LL
int main(){
int N,M;
cin>>N>>M;
int B = min(M,300);
vector<mint> is(M+5);
rep(i,M+5){
if(i==0)continue;
is[i] = mint(i).inv();
}
vector cnt(B+1,vector<mint>(M+1));
for(int i=1;i<=B;i++){
for(int j=1;j<=M;j++){
int a0 = i-1;
int m = j;
int n = M/i;
cnt[i][j] = floor_sum(n,m,i,a0);
cnt[i][j] *= is[M/i] * is[M/j];
}
}
vector<mint> num(B+1);
vector<int> a(N);
rep(i,N)scanf("%d",&a[i]);
fenwick_tree<mint> fw(M+1);
mint ans = 0;
rep(i,N){
//small, *
for(int j=1;j<=B;j++){
ans += num[j] * cnt[j][a[i]];
}
//big big
for(int j=a[i];j<=M;j+=a[i]){
ans += fw.sum(j+1,M+1)*is[M/a[i]];//mint(M/a[i]);
}
if(a[i]<=B)num[a[i]]++;
else{
for(int j=a[i];j<=M;j+=a[i]){
fw.add(j,is[M/a[i]]);//mint(M/a[i]).inv());
}
}
}
num.assign(B+1,0);
reverse(a.begin(),a.end());
for(int i=1;i<=B;i++){
for(int j=1;j<=M;j++){
int a0 = j-1;
int m = i;
int n = M/j;
cnt[i][j] = floor_sum(n,m,j,a0);
cnt[i][j] *= is[M/i] * is[M/j];//mint(M/i) * mint(M/j);
}
}
rep(i,N){
//big, small
if(a[i]>B){
for(int j=1;j<=B;j++){
ans += num[j] * cnt[j][a[i]];
}
}
else num[a[i]]++;
}
rep(i,N)ans *= mint(M/a[i]);
cout<<ans.val()<<endl;
return 0;
}
沙耶花