求第10个数据点
  • 板块P3403 跳楼机
  • 楼主STUDENT00
  • 当前回复5
  • 已保存回复5
  • 发布时间2022/10/25 20:37
  • 上次更新2023/10/27 05:53:57
查看原帖
求第10个数据点
658786
STUDENT00楼主2022/10/25 20:37

我90pts了无数次。。。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int h,x,y,z,t[100010],ans;
queue<int> q;
int max(int a,int b){
	return (a>b?a:b);
}
signed main(){
    scanf("%lld%lld%lld%lld",&h,&x,&y,&z);
    if(x==1||y==1||z==1){
    	printf("%lld",h);
    	return 0;
	}
    if(x>z) swap(x,z);
    if(y>z) swap(y,z);
    memset(t,-1,sizeof(t));
    t[1]=0;
    q.push(1);
    while(!q.empty()){
    	int now=q.front(),a=now+x,b=now+y,sa=t[now],sb=t[now];
    	q.pop();
    	if(a>=z){
    		a-=z;
    		sa++;
		}
    	if(b>=z){
    		b-=z;
    		sb++;
		}
    	if(t[a]==-1){
    		t[a]=sa;
    		q.push(a);
		}
		if(t[b]==-1){
			t[b]=sb;
			q.push(b);
		}
	}
	for(int i=0;i<z;i++){
		if(t[i]!=-1) ans+=max((h-i+z)/z-t[i],0);
	}
    printf("%lld",ans);
    return 0;
}
2022/10/25 20:37
加载中...