比赛 |
EYOI与SBOI开学欢乐赛4th |
评测结果 |
WWWWWWWWWW |
题目名称 |
烟雾与火焰 |
最终得分 |
0 |
用户昵称 |
ZRQ |
运行时间 |
0.014 s |
代码语言 |
C++ |
内存使用 |
17.56 MiB |
提交时间 |
2022-09-12 21:58:16 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll __int128
using namespace std;
const int N=1000050;
ll n,p[5],cnt[N],ans;
bool vis[N];
char ch;
ll gcd(ll a,ll b)
{
ll t;
while(b) t=a%b,a=b,b=t;
return a;
}
inline void read(ll &x){x=0;ch=getchar();while(ch<48||ch>57)ch=getchar();while(ch>47&&ch<58)x=(x<<3)+(x<<1)+(ch^48),ch=getchar();return ;}
void write(ll x)
{
if(x>9) write(x/10);
putchar(x%10+'0');
}
int main()
{
freopen("burnTokyo.in","r",stdin);
freopen("burnTokyo.out","w",stdout);
memset(cnt,0x3f,sizeof(cnt));
write(cnt[0]);
ll INF=cnt[0];
read(n);
ans=n;
--n;
for(int i=1;i<=3;++i) read(p[i]);
sort(p+1,p+3);
cnt[0]=0;
ll s=p[2];
while(s<=n&&!vis[s%p[1]])
{
cnt[s%p[1]]=min(s/p[1],cnt[s%p[1]]);
vis[s%p[1]]=1;
s+=p[2];
}
memset(vis,0,sizeof(vis));
s=p[3];
while(s<=n&&!vis[s%p[1]])
{
cnt[s%p[1]]=min(s/p[1],cnt[s%p[1]]);
vis[s%p[1]]=1;
s+=p[3];
}
for(int i=0;i<p[1];++i)
if(cnt[i]==INF) ans-=n/p[1];
else ans-=cnt[i];
n%=p[1];
for(int i=1;i<=n;++i) if(cnt[i]==INF) --ans;
write(ans);
return 0;
}