zoukankan      html  css  js  c++  java
  • codeforces 961B Lecture Sleep

    题目链接:http://codeforces.com/contest/961/problem/B

    题意:小明同学上课老睡觉。一节课共有n分钟,然后给你一节课的每一分钟老师讲课的重点个数ai以及他的睡觉状态ti,1代表醒着,0代表睡觉。然后给你一个k,代表你可以在某一时刻叫醒小明,在接下来的k分钟小明将不会睡觉,但是只能叫一次。然后问你让你叫醒一次小明,他最多能学习多少重点。

    分析:要使小明学习的重点最多,他醒着的时候学到的东西是不变的,叫醒他唯一增加的就是在叫醒区间内原本是0的那些时间的重点数。因此我们可以先计算小明原本醒着的时间学到的重点的总数,然后我们只需要再枚举i,计算i到i+k-1这段时间内0状态的重点个数,就是在i时刻叫醒他,他所能多学到的重点。对于i到i+k-1区间0状态的重点个数,只需要维护一个前缀和,就可以O(1)计算了,总时间复杂度合理

    AC代码:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 long long a[1000005],t[1000005];
     6 int main(){
     7     ios_base::sync_with_stdio(0);
     8     cin.tie(0);
     9     int n,k;
    10     cin>>n>>k;
    11     for(int i=1;i<=n;i++){
    12         cin>>a[i];
    13     }
    14     for(int i=1;i<=n;i++){
    15         cin>>t[i];
    16     }
    17     long long result=0;
    18     a[0]=0;
    19     for(int i=1;i<=n;i++){
    20         if(t[i]==0) a[i]+=a[i-1];
    21         else {
    22             result+=a[i];
    23             a[i]=a[i-1];
    24         }
    25     }
    26     long long re=0;
    27     for(int i=1;i<=n-k+1;i++){
    28         re=max(re,a[i+k-1]-a[i-1]);
    29     }
    30     cout<<re+result<<endl;
    31 return 0;
    32 }
    View Code
  • 相关阅读:
    剧集更新表
    Pyhton资源
    JAVA资源
    012 循环
    011 条件判断
    010 使用list和tuple
    009 字符串和编码
    007 Python基础
    python 内置函数
    python 获取当前运行的类名函数名inspect.stack()[1][3]
  • 原文地址:https://www.cnblogs.com/ls961006/p/8782472.html
Copyright © 2011-2022 走看看