2025-10-10 学习日记

发布于 2025-10-10 12:00 771 字 4 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. 3703. 移除 K-平衡子字符串 关键词: 问题分析: 就是括号匹配问题,经典的栈题目 核心思路: 直接暴力模拟 这个方法其实跟栈没关系,每次把符号先进栈,遇到'('时直接进栈,遇到')'时检查栈内元素是否大于,再检查前 k 个元素是否都为'(',后 k 个元素是否都为')',这样就行了,由于没用啥栈,直接用 string

今日学习记录

1. 3703. 移除 K-平衡子字符串

关键词:栈 问题分析: 就是括号匹配问题,经典的栈题目

核心思路:

直接暴力模拟

这个方法其实跟栈没关系,每次把符号先进栈,遇到’(‘时直接进栈,遇到’)‘时检查栈内元素是否大于2*k,再检查前 k 个元素是否都为’(‘,后 k 个元素是否都为’)‘,这样就行了,由于没用啥栈,直接用 string

string removeSubstring(string s, int k) {

    string st = "";

    for (char c : s) {

        st.push_back(c);

        if (c == ')' && st.size() >= 2 * k) {

            bool isKBalanced = true;

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

                if (st[st.size() - 2 * k + i] != '(') {

                    isKBalanced = false;

                    break;

                }

            }

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

                if (st[st.size() - k + i] != ')') {

                    isKBalanced = false;

                    break;

                }

            }

            if (isKBalanced) {

                st.resize(st.size() - 2 * k);

            }

        }

    }

        return st;

    }

栈

有个技巧,不进行直接模拟,而是记录相同类型符号的次数使用 pair<char,int>元素,统计每个连续的符号的数量进行储存,每次枚举时检查栈顶的元素,相同则合并不同则可以快速知道对应的数量,然后进行判断匹配

string removeSubstring(string s, int k) {

        vector<pair<char,int>> st;

        for(char &c:s){

            if(!st.empty()&&st.back().first==c) st.back().second++;

            else st.push_back({c,1});

            if(c==')'&&st.size()>=2&&st.back().second==k&&st[st.size()-2].second>=k){

                st.pop_back();

                st.back().second -= k;

                if(st.back().second==0) st.pop_back();

            }

        }

        string ans = "";

        for(auto &p:st){

            ans += string(p.second,p.first);

        }

        return ans;

    }

学到的点:

  1. 栈

2. P13787 地毯 加强版 - 洛谷

关键词:前缀和 差分 问题分析: 经典的二维前缀和还有差分,就是盖毯子,对一个区间进行高维的加法

核心思路

二维差分

主要学习前缀和 & 差分 - OI Wiki 这个题就是先读取坐标设置二维差分,最后再处理的时候再使用二维前缀和进行计算每个点的数值,比较模板

#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int n,m,x1,y,x2,y2;
int arr[N][N];
int main(){
    cin>>n>>m;
    while(m--){
        cin>>x1>>y>>x2>>y2;
        arr[x1][y]++;
        arr[x1][y2+1]--;arr[x2+1][y]--;
        arr[x2+1][y2+1]++;
    }
    long long ans = 0;
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=n;j++){
            arr[i][j] += arr[i-1][j]+arr[i][j-1]-arr[i-1][j-1];
            ans += (i+j)^arr[i][j];
        }
    }
    cout<<ans;
    return 0;
}

学到的点:

  1. 二维前缀和
  2. 二维差分

执笔 手写

随机文章

加载中...