2025-11-13 学习日记

发布于 2025-11-13 12:00 496 字 3 min read 手写 每个字都是我自己敲的。

2025-12-24 学习日记2025-12-17 学习日记2025-12-14 学习日记2025-12-09 学习日记2025-12-08 学习日记2025-12-07 学习日记2025-12-06 学习日记2025-12-05 学习日记2025-12-04 学习日记2025-12-03 学习日记2025-12-02 学习日记2025-12-01 学习日记2025-11-30 学习日记2025-11-29 学习日记2025-11-28 学习日记2025-11-27 学习日记2025-11-26 学习日记2025-11-25 学习日记2025-11-24 学习日记2025-11-23 学习日记2025-11-22 学习日记2025-11-21 学习日记2025-11-20 学习日记2025-11-19 学习日记2025-11-18 学习日记2025-11-17 学习日记2025-11-16 学习日记2025-11-15 学习日记2025-11-14 学习日记2025-11-13 学习日记2025-11-12 学习日记2025-11-11 学习日记2025-11-10 学习日记2025-11-09 学习日记2025-11-08 学习日记2025-11-07 学习日记2025-11-06 学习日记2025-11-05 学习日记2025-11-04 学习日记2025-11-03 学习日记2025-11-02 学习日记2025-11-01 学习日记2025-10-31 学习日记2025-10-30 学习日记2025-10-29 学习日记2025-10-28 学习日记2025-10-27 学习日记2025-10-26 学习日记2025-10-25 学习日记2025-10-24 学习日记2025-10-23 学习日记2025-10-22 学习日记2025-10-21 学习日记2025-10-20 学习日记2025-10-19 学习日记2025-10-18 学习日记2025-10-17 学习日记2025-10-16 学习日记2025-10-15 学习日记2025-10-14 学习日记2025-10-13 学习日记2025-10-11 学习日记2025-10-10 学习日记2025-10-09 学习日记2025-10-03 学习日记2025-10-02 学习日记2025-10-01 学习日记2025-09-30 学习日记2025-09-29 学习日记2025-09-28 学习日记2025-09-27 学习日记2025-09-26 学习日记2025-09-25 学习日记2025-09-24 学习日记2025-09-23 学习日记2025-09-22 学习日记2025-09-21 学习日记2025-09-20 学习日记2025-09-18 学习日记2025-09-17 学习日记2025-09-16 学习日记2025-09-15 学习日记2025-09-14 学习日记2025-09-13 学习日记2025-09-12 学习日记2025-09-11 学习日记2025-09-10 学习日记2025-09-09 学习日记2025-09-08 学习日记2025-09-04 学习日记2025-09-03 学习日记2025-09-02 学习日记2025-09-01 学习日记2025-08-31 学习日记2025-08-29 学习日记2025-08-28 学习日记2025-08-27 学习日记2025-08-26 学习日记2025-08-25 学习日记2025-08-24 周记2025-08-23 学习日记2025-08-22 学习日记2025-08-21 学习日记2025-08-20 学习日记2025-08-19 学习日记2025-08-18 学习日记2025-08-17 周记2025-08-16 学习日记2025-08-15 学习日记2025-08-14 学习日记2025-08-13 学习日记2025-08-12 学习日记2025-08-11 学习日记
今日学习记录 1. https://codeforces.com/problemset/problem/2000/D 关键词: 问题分析: 题目给出两个数组,两个关联数组,一个代表数组对应的值,一个只有字符,两个字符组成的数组,我们要选择 l 和 r 得到数值的总和,要求这个数值最大,而且每次选完后,都会把从 l 到 r 中的所有字符都改成,就是说不能再选择了 核心思路:...

今日学习记录

1. https://codeforces.com/problemset/problem/2000/D

关键词:贪心 双指针 问题分析: 题目给出两个数组,两个关联数组,一个代表数组对应的值,一个只有字符l,r两个字符组成的数组,我们要选择 l 和 r 得到数值a[l]+a[l+1]...a[r-1]+a[r]的总和,要求这个数值最大,而且每次选完后,都会把从 l 到 r 中的所有字符都改成*,就是说不能再选择了

核心思路: 我们先直接看,我们要尽量的去重复使用数值,而我们看,最保底的情况就是找到数组的最左和最右直接进行总和,而且进行之后就不能再进行了,所以我们一定要利用之间的数进行累加,例如 {1,2,3,4,5,6} {l,l,l,r,r,r} 我们如果直接选择 1 和 6,则只能得到 21,但是我们从中间开始,可以得到 3+4+2+3+4+5+1+2+3+4+5+6 = 41,这是最大值,所以问题就解决了

实现细节

我们在实现的时候,可以直接从外层进行实现,等同于上述操作,而且比较好实现 要用到区间和,前缀和预处理,双指针从头和尾开始遍历找

**最终代码:

#include <bits/stdc++.h>

using namespace std;

#define ve vector

using ll = long long;

using ull = unsigned long long;

using sr = string;

using db = double;

const int MOD=998244353;

const ll INF=1e18;

const int DIR[4][2] = {{1,0},{-1,0},{0,-1},{0,1}};

int T;

void solve(){

    int n;cin>>n;

    ve<ll> arr(n),pre(n+1);

    ve<char> lr(n);

    for(int i = 0;i<n;i++){

        cin>>arr[i];

        pre[i+1] = pre[i] + arr[i];

    }

    for(int i = 0;i<n;i++) cin>>lr[i];

    int left = 0,right = n-1;

    ll sum = 0;

    while(left<right){

        if(lr[left]=='L'&&lr[right]=='R'){

             sum += pre[right+1] - pre[left];

             left++;

             right--;

        }

        if(lr[left]!='L') left++;

        if(lr[right]!='R') right--;

    }

    cout<<sum<<endl;

}

signed main() {

    ios_base::sync_with_stdio(false);

    cin.tie(nullptr);

    cin>>T;

    while(T--) solve();

}

学到的点:

  1. 简单

执笔 手写

随机文章

加载中...