20pts求助
查看原帖
20pts求助
680708
klotliao楼主2022/9/4 18:43
#include<bits/stdc++.h>
using namespace std;
int n,x,a[100005],slp,task;
double p,q,r;
long long day;
int main() {
	cin>>n>>x>>p>>q;
	r=p/q;
	for(int i=1;i<=n;i++) cin>>a[i];
	while(task<=n) {
		day++;
		int t=0,least=ceil(r*x*day)-slp,j=0;
		while(x-t>least&&t<x) {
			t+=a[task+1];
			if(x-t>=least&&t<x&&task<n) task++,j++;
			else {
				t-=a[task+1];
				break;
			}
		}
		slp+=x-t;
		if(task==n) break;
		//printf("Day%d: task %d;now_task %d;least %d;working %d;total_sleep %d\n",day,task,j,least,t,slp);
	}
	cout<<day;
}

思路大概是当每一轮这一天除去工作时间后的时间足够睡觉(睡觉最少时间即r*x*i-前几天睡觉时间)的时候,进行工作(task++),更新工作时长

2022/9/4 18:43
加载中...