Lecture Sleep CodeForces - 961B 前缀和

传送门
思路:状态和价值分别求一次前缀和即可。

#include<iostream>
#include<set>
using namespace std;
string s;
set<char>st;
long long f[100005];
long long v[100005], s1[100005], s2[100005];
int n, m;
// sum = 0;
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
        s1[i] = s1[i - 1] + v[i];
  //      sum += v[i];
    }
    for(int i = 1; i <= n; i++)
        cin >> f[i];
    for(int i = 1;i <= n;i++)
    {
        if(f[i])
            s2[i] = s2[i - 1] + v[i];
        else
            s2[i] = s2[i - 1];
    }
        int i = 0;
        long long ans = 0;
    while(i + m <= n)
    {
        ans = max(s1[i + m] - s1[i] + s2[i] + s2[n] - s2[i + m], ans);
        i++;
    }
    cout << ans << endl;
    return 0;
}

发布了241 篇原创文章 · 获赞 8 · 访问量 4851

猜你喜欢

转载自blog.csdn.net/weixin_43960370/article/details/103485957
今日推荐