結果
| 問題 |
No.1532 Different Products
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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;
}