第12届北师大校赛热身赛第二场 A.不和谐的长难句1

79 篇文章 0 订阅

题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=17121

2014-04-25 22:59:49

不和谐的长难句1

8000ms
2000ms
65536KB
64-bit integer IO format:  %lld      Java class name:  Main
Font Size:   
Type: 
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •                    
  • 某L最近非常苦逼地在看一本叫做《鸡阿姨&鸡玛特 阅读难句教程》的书,这本书的主要内容就是讲解一堆奇怪的难懂的无比冗长同时又让人看了想睡觉的“长难句”,每个句子中都有无数不认识的单词外加倒装、省略、插入语、复杂修饰、和固定搭配,然后还总是让人看到晕头转向都看不到一个句号。

    但更让人纠结的是,在这么BT的前提下,居然还有些句子因为排版原因被分在了两页(即前一页的最后几行和后一页的前几行),这让某L非常恼火,于是他开始观察这本书的排版方式【这关注点真偏— —||】,他发现,这本书的结构其实很简单,书中共有N(N<=10^6)个小段,每段包括一个带有编号长难句和其对应的讲解,每个长难句都占5行(包括其编号),而编号为i的长难句对应的讲解占a[i]行。排版顺序则是按照长难句的编号由小到大,每个长难句之后紧接着就是其对应的讲解,然后再紧跟着下一个长难句和其对应的讲解……由于书中每一页最多只能排30行内容,所以导致了上述悲剧的发生。为了解决这个问题,某L想在每个小段中间加上一些空行(当然也可以不加),使得所有的长难句都在同一页内。那么他最少需要加多少个空行呢=,=

    Input

    一个整数N,表示一共有N的小段

    接下来N行,每行两个数m、a[m],表示编号为m的长难句对应的讲解占a[m]行。

    0<N<=10^6

    1<=m<=N,并且不会重复

    a[m]为int型正整数。

    Output

    一个整数P,表示最少需要添加的空行的数目

    Sample Input

    2
    1 24
    2 10
    

    Sample Output

    1

    Hint

    输入量巨大,请使用scanf,使用cin的话可能TLE。


    也是水题一道。。。不过比赛的时候没想出来,后来才AC的。。。设m为上次没放完的那一部分则 m=(m+5+a[i])%30,则30-m即为这次应该加上的行数,不过这种算法会把最后一页的也加上,所以要扣掉



    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a[1000003];
    int main()
    {
        int n,m,sum;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&m);
            scanf("%d",&a[m]);
        }
        sum=0;
        m=0;
        for(int i=1;i<=n;i++)
        {
            m=(m+5+a[i])%30;
            if(m>25&&m<30)
            {
                sum+=30-m;
                if(i!=n)
                    m=0;
            }
        }
        if(m>25&&m<30)
            sum-=30-m;
        cout<<sum<<endl;
        return 0;
    }
    








    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值