結果
問題 | No.1532 Different Products |
ユーザー | kotatsugame |
提出日時 | 2021-06-04 21:48:16 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3,056 ms / 4,000 ms |
コード長 | 1,361 bytes |
コンパイル時間 | 997 ms |
コンパイル使用メモリ | 84,192 KB |
実行使用メモリ | 42,240 KB |
最終ジャッジ日時 | 2024-11-19 13:51:50 |
合計ジャッジ時間 | 92,257 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 62 |
ソースコード
#include<iostream> #include<vector> #include<map> using namespace std; int N; long K; long ans; int cnt[1<<17]; int cnt2[1<<17]; const int LIM=43; int main() { cin>>N>>K; map<long,int>mp; mp[1]=1; for(int i=2;i<=LIM&&i<=N;i++) { map<long,int>nxt; for(pair<long,int>p:mp) { long t=p.first; if(t*i>K) { if(t<1<<17)cnt[t]+=p.second; if(K/t<1<<17)cnt2[K/t]+=p.second; else cnt2[(1<<17)-1]+=p.second; } else { nxt[t]+=p.second; nxt[t*i]+=p.second; } } mp.swap(nxt); } for(pair<long,int>q:mp) { long p=q.first; if(p<1<<17)cnt[p]+=q.second; if(K/p<1<<17)cnt2[K/p]+=q.second; else cnt2[(1<<17)-1]+=q.second; } for(int i=1;i<1<<17;i++)cnt[i]+=cnt[i-1]; for(int i=(1<<17)-1;i--;)cnt2[i]+=cnt2[i+1]; if(N<=LIM) { cout<<(long)cnt2[0]*2-1<<endl; return 0; } ans=cnt2[1]; for(int i=LIM+1;i<=N;i++) { ans+=cnt2[i]; for(int j=i+1;j<=N;j++) { ans+=cnt2[i*j]; for(int k=j+1;k<=N;k++) { int t=i*j*k; if(t>K)break; if(t<1<<17)ans+=cnt2[t]; else ans+=cnt[K/t]; for(int l=k+1;l<=N;l++) { int u=t*l; if(u>K)break; if(u<1<<17)ans+=cnt2[u]; else ans+=cnt[K/u]; for(int m=l+1;m<=N;m++) { long v=(long)u*m; if(v>K)break; if(v<1<<17)ans+=cnt2[v]; else ans+=cnt[K/v]; } } } } } cout<<ans*2-1<<endl; }