修改密码

【2024周赛课程】内部周赛训练精讲课程

成品课程

陈远龙老师主讲 & 答疑

未购买 · 可先试学5节课

课程目录展开/折叠

2024.12.15-Contest#37-每周六模拟比赛题目讲解

播放快捷键

播放/暂停:空格(或鼠标单击)      全屏:F(或鼠标双击)      退出全屏:Esc

快进10 / 30 / 60秒:方向键→ / Ctrl + 方向键→ / Shift + 方向键→

快退10 / 30 / 60秒:方向键← / Ctrl + 方向键← / Shift + 方向键←

本节课讲解配套PPT&板书:

比赛题目参考源代码

源代码下载:2024.12.15-Contest#37参考源代码下载

1. C1145-前缀和的逆-1
#include <bits/stdc++.h>
using namespace std;

int n;
int b[10005];

int main()
{
    cin >> n;
    for (int i = 1; i <= n; i ++)
        cin >> b[i];
    for (int i = 1; i <= n; i ++)
        cout << b[i] - b[i - 1] << ' ';

    return 0;
}
2. C1146-A-B 数对-1
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5 + 5;
int a[MAXN];

int main()
{
    int n, c;
    cin >> n >> c;
    for (int i = 0; i < n; i ++)
        cin >> a[i];

    long long ans = 0;
    for (int i = 0; i < n - 1; i ++)
    {
        for (int j = i + 1; j < n; j ++)
        {
            if (abs(a[i] - a[j]) == c) ans ++;
        }
    }
    cout << ans;

    return 0;
}
3. C1146-A-B 数对-2
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5 + 5;
int a[MAXN];
unordered_map<int, int> mp; 

int main()
{
    int n, c;
    cin >> n >> c;
    for (int i = 0; i < n; i ++)
    {
        cin >> a[i];
        mp[a[i]] ++;
    }
    long long ans = 0;
    for (int i = 0; i < n; i ++)
    {
        ans += mp[a[i] - c];
    }
    cout << ans;

    return 0;
}
4. C1146-A-B 数对-3
#include <bits/stdc++.h>
using namespace std;

const int MAXN = 2e5 + 5;
int a[MAXN];

int main()
{
    int n, c;
    cin >> n >> c;
    for (int i = 0; i < n; i ++)
        cin >> a[i];

    sort(a, a + n);
    long long ans = 0;
    for (int i = 0; i < n; i ++)
    {
        int l = lower_bound(a, a + n, a[i] + c) - a;
        int r = upper_bound(a, a + n, a[i] + c) - a;
        ans += r - l;
    }
    cout << ans;

    return 0;
}
5. C1147-方阵排序-1
#include <bits/stdc++.h>
using namespace std;

struct Node {
    int n;
    int m;
    int data[105][105];
    int h; // 平均身高 
    int seq;
};

Node fz[105];

bool cmp(Node &n1, Node &n2)
{
    return n1.h < n2.h || (n1.h == n2.h && n1.seq < n2.seq);
}

int main()
{
    int k;
    cin >> k;
    for (int i = 0; i < k; i ++)
    {
        cin >> fz[i].n >> fz[i].m;
        int tot = 0;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cin >> fz[i].data[r][c];
                tot += fz[i].data[r][c];
            }
        }
        fz[i].h = int(tot * 1.0 / (fz[i].n * fz[i].m) * 100 + 0.5);
        fz[i].seq = i;
    }

    sort(fz, fz + k, cmp);

    for (int i = 0; i < k; i ++)
    {
        cout << fz[i].n << ' ' << fz[i].m << endl;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cout << fz[i].data[r][c] << ' ';
            }
            cout << endl;
        }
    }

    return 0;
}
6. C1147-方阵排序-2
#include <bits/stdc++.h>
using namespace std;

struct Node {
    int n;
    int m;
    int data[105][105];
    int h; // 平均身高 
};

Node fz[105];

bool cmp(const Node &n1, const Node &n2)
{
    return n1.h < n2.h;
}

int main()
{
    int k;
    cin >> k;
    for (int i = 0; i < k; i ++)
    {
        cin >> fz[i].n >> fz[i].m;
        int tot = 0;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cin >> fz[i].data[r][c];
                tot += fz[i].data[r][c];
            }
        }
        fz[i].h = int(tot * 1.0 / (fz[i].n * fz[i].m) * 100 + 0.5);
    }

    stable_sort(fz, fz + k, cmp);

    for (int i = 0; i < k; i ++)
    {
        cout << fz[i].n << ' ' << fz[i].m << endl;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cout << fz[i].data[r][c] << ' ';
            }
            cout << endl;
        }
    }

    return 0;
}
7. C1147-方阵排序-3
#include <bits/stdc++.h>
using namespace std;

struct Node {
    int n;
    int m;
    int data[105][105];
    int h; // 平均身高 
};

Node fz[105];
int k;

void bubble_sort() // 冒泡排序,稳定的排序,小数冒泡的写法 
{
    for (int i = 0; i < k - 1; i ++)
    {
        bool flag = false;
        for (int j = k - 1; j > i; j --)
        {
            if (fz[j].h < fz[j - 1].h)
            {
                swap(fz[j], fz[j - 1]);
                flag = true;
            }
        }
        if (!flag) return;
    }
}

int main()
{
    cin >> k;
    for (int i = 0; i < k; i ++)
    {
        cin >> fz[i].n >> fz[i].m;
        int tot = 0;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cin >> fz[i].data[r][c];
                tot += fz[i].data[r][c];
            }
        }
        fz[i].h = int(tot * 1.0 / (fz[i].n * fz[i].m) * 100 + 0.5);
    }

    // stable_sort(fz, fz + k, cmp);
    bubble_sort();

    for (int i = 0; i < k; i ++)
    {
        cout << fz[i].n << ' ' << fz[i].m << endl;
        for (int r = 0; r < fz[i].n; r ++)
        {
            for (int c = 0; c < fz[i].m; c ++)
            {
                cout << fz[i].data[r][c] << ' ';
            }
            cout << endl;
        }
    }

    return 0;
}
8. C1147-方阵排序-4
#include <bits/stdc++.h>
using namespace std;

int fz[10005][105];
int line;
int n[105], m[105];
// double h[105]; // 每个方阵的平均高度 
int h[105]; // 每个方阵的平均高度 

int *p[105];

int k;

void bubble_sort() // 冒泡排序,稳定的排序,小数冒泡的写法 
{
    for (int i = 0; i < k - 1; i ++)
    {
        bool flag = false;
        for (int j = k - 1; j > i; j --)
        {
            if (h[j] < h[j - 1])
            {
                swap(h[j], h[j - 1]);
                swap(p[j], p[j - 1]);
                swap(n[j], n[j - 1]);
                swap(m[j], m[j - 1]);
                flag = true;
            }
        }
        if (!flag) return;
    }
}

int main()
{

    cin >> k;
    for (int i = 0; i < k; i ++)
    {
        cin >> n[i] >> m[i];
        p[i] = &fz[line][0];
        int tot = 0;
        for (int r = 0; r < n[i]; r ++)
        {
            for (int c = 0; c < m[i]; c ++)
            {
                cin >> fz[line][c];
                tot += fz[line][c];
            }
            line ++;
        }
        h[i] = int(tot * 1.0 / (n[i] * m[i]) * 100 + 0.5);
        // cout << h[i] << endl;
    }

    bubble_sort();

    // 输出方阵信息 
    for (int i = 0; i < k; i ++)
    {
        int *ps = p[i];
        cout << n[i] << ' ' << m[i] << endl;
        for (int r = 0; r < n[i]; r ++)
        {
            for (int c = 0; c < m[i]; c ++)
            {
                // cout << *(p[i] + r * m[i] + c) << ' '; // 这样不行,因为会访问的是当前行后面为0的列 
                cout << *(ps + c) << ' ';
            }
            ps += 105; // 二维数组的列数 
            cout << endl;
        }
    }

    return 0;
}
9. C1148-最长公共子序列-1
#include <bits/stdc++.h>
using namespace std;

int dp[5005][5005];

int main()
{
    const char endl = '\n';
    ios::sync_with_stdio(false);
    cin.tie(0);

    string x, y;
    while (cin >> x >> y)
    {
        int n = x.size();
        int m = y.size();

        for (int i = 1; i <= n; i ++)
        {
            for (int j = 1; j <= m; j ++)
            {
                if (x[i - 1] == y[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            }
        }
        cout << dp[n][m] << endl;      
    }

    return 0;
}
10. C1148-最长公共子序列-2
#include <bits/stdc++.h>
using namespace std;

int dp[5005][5005];
char x[5005], y[5005];

int main()
{
    const char endl = '\n';
    ios::sync_with_stdio(false);
    cin.tie(0);

    while (cin >> x >> y)
    {
        int n = strlen(x);
        int m = strlen(y);

        for (int i = 1; i <= n; i ++)
        {
            for (int j = 1; j <= m; j ++)
            {
                if (x[i - 1] == y[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
                else dp[i][j] = max(dp[i][j - 1], dp[i - 1][j]);
            }
        }
        cout << dp[n][m] << endl;      
    }

    return 0;
}

本节课答疑

建议大家有问题先通过AI答疑(比如:DeepSeek 等),AI时代需要学会使用AI辅助学习

陈远龙老师视频讲解:如何使用DeepSeek进行答疑?

通过AI未能获得满意解答的,可以联系陈远龙老师答疑

目录