CF1902 B Getting Points 题解

发布时间 2023-12-04 16:07:19作者: Martian148

Link

CF1902 B Getting Points

Question

Monocarp 的一个学期有 \(n\) 天,需要修 \(P\) 个学分,完成一节课程加 \(l\) 个学费,完成一个任务加 \(t\) 个学分

Monocarp 一天可以完成一节课+两个任务

任务每周分配一个,也就是 day1,day8,day15...

问,在可以修满学分的情况下,Monocarp 最多休息的天数

Solution

由于任务可以在发布的那天到最后一天都可以做,所以贪心,把任务都放在最后做

并且一天能做两个任务就做两个任务。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
    int ret=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}
    while(ch<='9'&&ch>='0')ret=ret*10+ch-'0',ch=getchar();
    return ret*f;
}
void solve(){
    int n=read(),P=read(),l=read(),t=read(),m;
    int num_t=(n-1)/7+1,day_t=num_t/2;
    if(num_t*t+day_t*l>=P) { //都做任务
        m=P/(l+t*2)+(P%(l+t*2)!=0);
    }
    else{
        int P_=P-(num_t*t+day_t*l);
        m=day_t+P_/l+(P_%l!=0);
    }
    printf("%lld\n",n-m);
}
signed main(){
    freopen("B.in","r",stdin);
    int T=read();
    while(T--) solve();
}