• 山魔


    有n 座山,每座山有南北两面。
    每一天,一些山的某一面(不一定相同) 会受到山魔的袭击。
    但是山魔一天最多只会袭击k 座山。
    当每座山的每一面都被袭击过后,山魔就会离开。
    那么至少要经过多少天,山魔会消失?
    Input
    一行两个正整数n, k。
    Output
    一个整数,表示答案。
    Examples
    devil.in devil.out
    3 2 3
    Notes
    对于所有数据,满足1 ≤ n, k ≤ 10。
    Task1[10%]
    k = 1

    Task2[50%]
    k ≤ 4
    Task3[100%]
    无特殊限制

    思路:

    这个问题其实就相当于我们小学学的“锅煎蛋”问题,给你蛋的数量n和锅的数量k,一个锅煎一面蛋要1分钟,求要几分钟可把每个蛋的两面煎完。

    此题目很简单,代码如下。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    int main()
    {
        freopen("devil.in","r",stdin);
        freopen("devil.out","w",stdout);
        cin>>n>>k;
        if(k>=n) cout<<2<<endl;//若锅比蛋多,则可以花1min去煎每个蛋的一面,所以要用2min。 
        else cout<<ceil(n*2/k*1.0)<<endl;
        return 0;
    }

    证明:

    若n为k的倍数,则毋庸置疑,ans=n*2/k;

    若n>2*k,则可以把n减去s倍的k,使n<2*k(n=2*k时就变成上面的式子了)然后ans+=s*2;

    这时候我们定义x=n-s*k。

    再花1min煎x个蛋,花1min煎后x个蛋的另一面,ans+=2,所以剩下(n-x)*2个面。

    又因为n<2*k,所以剩下的面<2k,ans+=2

    所以ans=(s+2)*2,正好满足。证毕。

  • 相关阅读:
    土法炼钢:怎么实现一个简单的B+Tree In-Disk
    panguan(判官):一个自研的任务执行引擎的工程实践
    团队源代码管理
    测试——俄罗斯方块
    测试——连连看
    测试——食物链教学小工具
    测试——约跑APP
    beta-review阶段贡献分分配
    第十周PSP&进度条
    吉林市一日游
  • 原文地址:https://www.cnblogs.com/xinxiyuan/p/11182361.html
Copyright © 2020-2023  润新知