题解 P2793 【Facer的工厂】

· · 题解

AC,附详细解释

这个题解也是我RE#19后看了下大佬的代码,然后改进了自己的,也感谢下讨论区的大佬

这个题#19 特别大,RE了好几遍,TLE了好几遍

cin>>,cout<<不能用,RE的可以换一换输入输出

思路

模拟吧,详解在注释,代码不长,就不拿出来单独解思路了

AC代码

AC详情

#include<bits/stdc++.h>
using namespace std;
int n,m,k,a,o;
long long s=0;
int main(){
    scanf("%d%d%d",&n,&m,&k);//输入,要用scanf,不然#19 RE 
    for(int i=1;i<=n;i++){//对于每一个物品都判断一次 
        scanf("%d",&a);//同样 
        if(o+a>m){//如果这个加上上一个剩余的长度最大等待长度 
            s++;//这一秒不能放,所以让机器先处理一次,s++进入下一秒 
            //在处理的这一秒会把之前剩余的处理完(因为后面是%运算,所以剩下一定系<机器处理一秒的) 
            o=a;//剩余的没有了,把新的杆子放到等待处 
        }
        else o+=a;//如果这个杆子加上剩余的不大于等待的,就一块算 
        s+=o/k;//时间加上机器最大处理的时间 
        o%=k;//o记录剩下的有多长(o一定小于机器一秒处理的长度) 
    }
    if(o!=0)s++;//最后如果o还有数,就得画上一秒去处理剩余的 
    printf("%lld\n",s);//输出 
    return 0;
}

感谢大家能看我的题解!~