結果
| 問題 |
No.1862 Copy and Paste
|
| コンテスト | |
| ユーザー |
vjudge1
|
| 提出日時 | 2024-11-13 22:00:36 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,889 bytes |
| コンパイル時間 | 1,966 ms |
| コンパイル使用メモリ | 170,540 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-13 22:00:39 |
| 合計ジャッジ時間 | 3,355 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | AC * 1 WA * 26 |
ソースコード
#include<bits/stdc++.h>
#define Endl putchar('\n')
#define D(x) cerr<<"D:"<<__LINE__<<' '<<#x<<':'<<x<<endl
#define out() cerr<<"OUT:"
typedef __int128 ll;
using namespace std;
inline ll read(){ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;}
inline void write(ll x){if(x>9)write(x/10);putchar(x%10+'0');return;}
const int N=2e5+20;
const ll INF=9e18;
inline ll pw(ll x,ll y){
ll res=1;
while(y){
if(y&1)res=res*x;
x=x*x;
y>>=1;
if(res>INF||x>INF)return INF;
}
return res;
}
inline pair<ll,ll> _get(ll x,ll y){
ll l=0,r=INF,res=0;
while(l<=r){
ll mid=l+r>>1;
if(pw(mid,y)==x)return {mid,mid};
if(pw(mid,y)<x)l=mid+1;
else r=mid-1;
}
return {min(l,r),max(l,r)};
}
inline ll min(ll x,ll y){
return x>y?y:x;
}
int main(){
// freopen("dice.in","r",stdin);
// freopen("dice.out","w",stdout);
ll n=read(),x=read(),y=read();
n--;
ll res=INF;
for(int i=1;i<=64;i++){
if(i>n)break;
pair<ll,ll> p=_get(n,i);
// cout<<p.first<<' '<<p.second<<'\n';
for(int k=p.first;k<=p.second;k++){
for(int a=0;a<i;a++){
ll now=0,f=1,cnt=1;
for(int j=1;j<i;j++){
now+=x+y*(j<=a?k-1:k);
cnt+=f*(j<=a?k-1:k);
f=cnt;
}
// cout<<"update:"<<cnt<<' '<<now<<' '<<k<<' '<<i<<' '<<f<<'\n';
if(cnt<=n){
now+=x+y*ceil(1.0*(n-cnt+1)/f);
cnt+=f*ceil(1.0*(n-cnt+1)/f);
}
// cout<<"change"<<now<<'\n';
res=min(res,now);
}
for(int a=0;a<i;a++){
ll now=0,f=1,cnt=1;
for(int j=1;j<i;j++){
now+=x+y*(j>a?k+1:k);
cnt+=f*(j>a?k+1:k);
f=cnt;
}
// cout<<"update:"<<cnt<<' '<<now<<' '<<k<<' '<<i<<' '<<f<<'\n';
if(cnt<=n){
now+=x+y*ceil(1.0*(n-cnt+1)/f);
cnt+=f*ceil(1.0*(n-cnt+1)/f);
}
// cout<<"change"<<now<<'\n';
res=min(res,now);
}
}
}
write(res);
return 0;
}
vjudge1