結果
| 問題 |
No.1383 Numbers of Product
|
| コンテスト | |
| ユーザー |
蜜蜂
|
| 提出日時 | 2020-12-15 18:54:50 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 127 ms / 2,000 ms |
| コード長 | 2,077 bytes |
| コンパイル時間 | 2,184 ms |
| コンパイル使用メモリ | 177,476 KB |
| 実行使用メモリ | 25,356 KB |
| 最終ジャッジ日時 | 2024-11-22 23:10:08 |
| 合計ジャッジ時間 | 5,705 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 51 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define fi first
#define se second
bool b1(ll n,ll k){
long double z=(-k+sqrt(k*k+4*n))/2;
ll check=z+0.5;
return check*(check+k)==n;
}
int main(){
ll n,k,m;
cin>>n>>k>>m;
if(m>23){
cout<<0<<endl;
return 0;
}
vector<ll> more2;
ll start,flag;
for(ll i=2;i<=20;i++){
start=1;
flag=0;
while(flag==0){
ll x=start;
for(ll j=1;j<=i;j++){
if(n/x<start+j*k){
flag++;
break;
}
x*=(start+j*k);
}
start++;
if(x<=n&&flag==0){
more2.push_back(x);
}
}
}
if(more2.size()==0){
if(m>1){
cout<<0<<endl;
return 0;
}
else{
ll ok=-1,ng=1e12;
while(ng-ok>1){
ll check=(ok+ng)/2;
if(check<=n/(check+k)){
ok=check;
}
else{
ng=check;
}
}
cout<<ok<<endl;
return 0;
}
}
sort(more2.begin(),more2.end());
vector<vector<ll>> s(25);
int now=0;
while(now<more2.size()){
ll x=more2[now];
int z=0;
while(more2[now]==x&&now<more2.size()){
z++;
now++;
}
s[z].push_back(x);
}
if(m==1){
ll ok=-1,ng=1e9;
while(ng-ok>1){
ll check=(ok+ng)/2;
if(check<=n/(check+k)){
ok=check;
}
else{
ng=check;
}
}
ll ans=s[1].size()+ok;
if(s[1].size()>0){
for(ll x:s[1]){
if(b1(x,k)==true){
ans--;
}
}
}
ll w=0;
for(int i=0;i<25;i++){
if(s[i].size()>0){
for(ll x:s[i]){
if(b1(x,k)==true){
w++;
}
}
}
}
cout<<ans-w<<endl;
return 0;
}
else{
ll ans=0;
if(s[m].size()>0){
for(ll x:s[m]){
if(b1(x,k)==false){
//cout<<x<<endl;
ans++;
}
}
}
if(s[m-1].size()>0){
for(ll x:s[m-1]){
if(b1(x,k)==true){
//cout<<x<<endl;
ans++;
}
}
}
cout<<ans<<endl;
}
}
蜜蜂