比赛 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;
}