2025-10-20 学习日记

发布于 2025-10-20 12:00 582 字 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. Problem - 2064C - Codeforces 关键词: 问题分析: 输入 T(≤1e4) 表示 T 组数据。所有数据的 n 之和 ≤2e5。 每组数据输入 n(1≤n≤2e5) 和长为 n 的数组。 每次操作,你可以选择 a 中的一个数,得到 分。 然后: 如果 ,移除 及其右边的所有元素。 否则,移除 及其左边的所有元素。 操作直到数组为空。...

今日学习记录

1. Problem - 2064C - Codeforces

关键词:前后缀 问题分析: 输入 T(≤1e4) 表示 T 组数据。所有数据的 n 之和 ≤2e5。 每组数据输入 n(1≤n≤2e5) 和长为 n 的数组a(-1e9≤a[i]≤1e9, a[i]≠0)。 每次操作,你可以选择 a 中的一个数a[i],得到 |a[i]| 分。 然后: 如果 a[i] < 0,移除 a[i] 及其右边的所有元素。 否则,移除 a[i] 及其左边的所有元素。 操作直到数组为空。 输出最大总得分。

核心思路: 正数从左边开始选,负数从右边开始选 处理就用前后缀,简单

**最终代码:

#include<bits/stdc++.h>

using namespace std;

int n,m;

int main(){

    cin>>n;

    while(n--){

        cin>>m;

        vector<long long> arr(m+1);

        vector<long long> pre(m+1);

        vector<long long> suf(m+1);

        for(int i = 1;i<=m;i++){

            cin>>arr[i];

            pre[i] = pre[i-1]+(arr[i]>=0?arr[i]:0);

        }

        for(int i = m-1;i>=0;i--) suf[i] = suf[i+1]+(arr[i+1]<0?-arr[i+1]:0);

        long long ans = 0;

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

            ans = max(pre[i]+suf[i],ans);

        }

        cout<<ans;

        cout<<endl;

    }

    return 0;

}

学到的点:

  1. 观察力和敏感度不够

2. Problem - 1931D - Codeforces

关键词:同余 问题分析: 输入 T(≤1e4) 表示 T 组数据。所有数据的 n 之和 ≤2e5。 每组数据输入 n(2≤n≤2e5) x y(1≤x,y≤1e9) 和长为 n 的数组a(1≤a[i]≤1e9)。 输出有多少个下标对 (i,j) 同时满足:

  1. i < j。
  2. a[i]+a[j]是 x 的倍数。
  3. a[i]-a[j]是 y 的倍数。 核心思路

同余

  • (a[i]+a[j])%x = 0 -> a[i]%x = (-a[j])%x
  • (a[i]-a[j])%x = 0 -> a[i]%x = (a[j])%x 要满足以上两个条件的话,要两个都同时相等 那么就是找对应{a[i]%x,(a[j])%x}键与{a[i]%x,(-a[j])%x}键相等的数量 先记录前者的数量,再每次查找后者的数量并加入到答案中

最终代码:

#include<bits/stdc++.h>

using namespace std;

int T,n,x,y;

int main(){

    cin>>T;

    while(T--){

        cin>>n>>x>>y;

        vector<int> arr(n);

        map<pair<int,int>,int> mp;

        long long ans = 0;

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

            cin>>arr[i];

            ans += mp[pair{(x-arr[i]%x)%x,arr[i]%y}];

            mp[pair{arr[i]%x,arr[i]%y}]++;

        }

        cout<<ans<<endl;

    }

    return 0;

}

学到的点:

  1. 不知道同余是来干什么的

执笔 手写

随机文章

加载中...