Coderforces 799A 思维题

传送门:题目

题意:

n个蛋糕,每一个烤箱生产k个蛋糕需要花费t分钟,现在有1个烤箱,如果再拿一个烤箱过来需要花费d分钟,拿烤箱的时候也可以造蛋糕,就是互不耽误,问有没有必要拿第二个烤箱。

题解:

看到这种题目,一开始以为是模拟题,就用了两个for循环,第一个for模拟一个烤箱,第二个for模拟二个烤箱,最后比较时间大小,最后也AC了。
赛后看题解,头文件到return 0;一共两行,WTF?
发现这是一道思维题。
公式是: d<n1kt d < n − 1 k ∗ t 或者 d<(floor)nktt d < ( f l o o r ) n k ∗ t − t 满足公式输出“YES”,不满足公式输出“NO”
两个公式都表示一个含义,第二个公式比较好理解,我们就看第二个:
nkt n k ∗ t 表示只用一个烤箱,所花费的时间,那么再减去一个t呢?
表示只用一个烤箱,最后一批,刚刚放入烤箱的时间。
如果第二个烤箱能够在最后一批开始之前,开始工作,那么第二个烤箱肯定能帮助最后一批提前完成。

关于第一个公式,其实是第二个公式的化简结果:

首先,我们要知道一个整数除法向上取整的数学定理(整数除法,向上取整,结论加证明。
我们来化简一下 d<(floor)nktt d < ( f l o o r ) n k ∗ t − t

(floor)nktt=(n1k+1)tt=n1kt ( f l o o r ) n k ∗ t − t = ( n − 1 k + 1 ) ∗ t − t = n − 1 k ∗ t

公式一得证

我第一开始忘了向上整除,WA7.

AC代码:

#include <iostream>
int main(void){
    int n,t,k,d;
    std::cin>>n>>t>>k>>d;
    int temp=n/k;
    if(n%k!=0)
        temp++;
    puts(d<temp*t-t?"YES":"NO"); 
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值