• 救火行动 ( save )  模拟


    【题目描述】
    秋哥
    喜欢唱歌。尤其是那种激情似火的歌。
    我滴热情,嘿,好像一把火,燃烧了整个科学馆!
    NeroYSQ
    这不,科学馆马上就起火了。于是,我们要救火,拯救学校财产于危难之中。科学馆
    是一栋
    N
    层的建筑
    ,起火地点位于每一层的最右边的那件房(就是五机房所在的位置)。我
    们用一个火势值来描述一间房的火势大小,如果一个房间的火势值为
    K
    ,那么这间房就需要
    至少
    K
    的水量才能扑灭这里的火。
    现在同学们打算用
    <<
    人多力量不一定大
    >>
    的方法来救火,方法如下:
    1.
    先在
    每一层都部署一些人,第
    i
    层部署
    A[i]+1
    个人。
    2.
    将这
    A[i]+1
    个人顺序编号为
    0~A[i]
    3.
    0
    号人(比方说
    Crab
    )站在每一层的厕所处,他将水从厕所的水龙头里引向楼
    道。
    4.
    j
    0<j<A[i]
    )号人每个人手里拿一个水桶,水桶有一个容量
    B[i][j]
    ,他将
    用自己手里的水桶从第
    j
    -
    1
    号人那里接水。超过他的水桶容量的水会被浪费掉。
    水将以类似于接力的方式向右传递。第
    0
    号人能提供的水量可以视为无穷大。
    5.
    A[i]
    号人手里也有一个水桶,他将会把他的得到的水直接筐到着火的房间里去,
    由于这个人任务重大,他手里的水桶是特制的,容量为
    1~A[i
    -
    1]
    号人手里的水
    桶的容量之和再加一。
    如果这一层只有一个人,那么这个人的水桶容量就为一。
    6.
    救火行动是一轮一轮进行的。在每一轮中,只有特定一层的那一组同学会工作,而
    且每个人只会传一次水,传完了就看着别人传,直到水被送到着火点(跟动
    画片里
    的情节挺像的!),这一轮结束。
    如果这一层传到着火点的总水量不小于这一层的火
    势值了,火将立即被扑灭。
    一轮将持续固定的
    一分钟
    7.
    救火行动将从第
    N
    层开始,每一层的火被扑灭了下一层才会开始。
    8.
    由于秋哥本人就位于第五层,所以第五层的火势特别猛烈,而且因为秋哥一直再唱
    歌,所以火势会随着时间
    不断
    增强。
    秋哥有一个热情值
    P
    每一轮结束时
    ,如果秋
    哥所在的这一层的火还没有被完全扑灭,这里的火势就会增加
    P
    。如果记这一轮结
    束时还有
    Q
    层的火没有被扑灭,这个热情值
    P
    就等于
    Q
    9.
    由于每次只有一层的同学处于工作状态
    ,所以别的层的同学会
    关注正在工作的那一
    层,
    每一层的火被扑灭时,所有的
    同学都会因为感到非常兴奋而庆祝整整一轮,在
    用来庆祝的这一轮中,所有同学都不会传水。
    10.
    一旦第一层的火被扑灭
    或救火行动持续了
    整整一天
    ,整个救火行动瞬间结束。
    也就
    是说第一层的火被扑灭时,同学们不会浪费时间来庆祝。
    如果你发现了这一行字,
    请不要高声喧哗,不要让别人发现
    求整个救火行动将持续多少轮。
    【输入数据】
    第一行一个数,
    N
    ,表示科学馆有
    N
    接下来
    N
    行,每行若干个数,第一个数表示
    A[i]
    ,接下来
    A[i]
    -
    1
    正整
    ,第
    j
    数表示
    B[i][j]
    ,再接下来一个
    正整
    K[i]
    ,表示这一层的火势值
    【输出数据】
    一个数,就是整个救火行动将持续的轮数
    【输入样例
    1
    6
    6 10 5 8 6 5 12
    1 2
    4 1 2 3 4
    4 4 3 2 1
    5 100 99 98 6 1
    2 1
    1
    【输出样例
    1
    22
    【输入样例
    2
    6
    6 10 5 8 6 5 12
    1 2
    4 1 2 3 4
    4 4 3 2 1
    5 100 99
    98 6 2
    2 1
    1
    【输出样例
    2
    23
    【输入样例
    3
    5
    1 100
    2 100 100
    3 100 100 100
    4 100 100 100 100
    5 100 100 100 5 6
    【输出样例
    3
    1440
    【数据约定】
    100%
    5
    N
    ≤ 100
    1
    A[i]
    ≤ 100
    1
    B[i][j]
    ≤ 100
    1
    K[i]
    ≤ 100
    【友情提示】
    题目描述非常长,请特别注意题目中
    要求。
    为了防止理解上的偏差,请
    参考
    样例
    ,仔细模拟一遍样例
    另外还有一点,过了样例也不一定能全对。
    这题其实就是一个模拟而已,提高D1T1难度。
    代码:
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #define ll long long
    #define il inline
    #define db double
    using namespace std;
    il int  gi()
    {
        int x=0,y=1;
        char ch=getchar();
        while(ch<'0'||ch>
          '9')
        {
        if(ch=='-')
            y=-1;
        ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
        x=x*10+ch-'0';
        ch=getchar();
        }
       return x*y;
    }
    il ll  gl()
    {
        ll x=0,y=1;
        char ch=getchar();
        while(ch<'0'||ch<'9')
        {
        if(ch=='-')
            y=-1;
        ch=getchar();
        }
        while(ch>='0'&&ch<='9')
        {
        x=x*10+ch-'0';
        ch=getchar();
        }
        return x*y;
    }
    int a[145];
    int minx[145];
    int b[145][145];
    int k[145];
    int main()
    {
        freopen("save.in","r",stdin);
        freopen("save.out","w",stdout);
        memset(minx,127/3,sizeof(minx));
        int n=gi();
        for(int i=1;i<=n;i++)
        {
        a[i]=gi();
        for(int j=1;j<a[i];j++)
        {
            b[i][j]=gi();
            minx[i]=min(minx[i],b[i][j]);
        }
        k[i]=gi();
    
        
        if(a[i]==1)
            minx[i]=1;
        }
        int now=n,ans=0;
        while(now!=0)
        {
        k[now]-=minx[now];
        ans++;
        if(k[now]<=0)
            
        {
            now--;
            ans++;
                k[5]+=now;
        }
        k[5]+=now;
        if(ans>1440
            )
            break;
        }
        printf("%d
    ",ans-1);
        return 0;
    }
    PEACE
  • 相关阅读:
    如何写出优秀的代码[转载]
    [转载]Java中常用日期功能综合
    JS WebBrowser 实现打印预览
    想成为优秀的技术人员你必须做到的几件事情【转载】
    JS打印
    js阿拉伯数字转中文大写
    从 SQL Server 2005 中处理 XML
    Visual Studio 2005 Express October 2004 CTP完整版本的下载
    Debug和Release的区别
    ASP.NET 中的正则表达式
  • 原文地址:https://www.cnblogs.com/gshdyjz/p/7429808.html
Copyright © 2020-2023  润新知