修改密码

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

成品课程

陈远龙老师主讲 & 答疑

未购买 · 可先试学5节课

课程目录展开/折叠

2024.12.29-Contest#39-每周六模拟比赛题目讲解

播放快捷键

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

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

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

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

比赛题目参考源代码

源代码下载:2024.12.29-Contest#39参考源代码下载

1. C1153-有趣的跳跃-1
#include <bits/stdc++.h>
using namespace std;

int n;
int a[3005];
int b[3005];

int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++)
        cin >> a[i];
    for (int i = 1; i < n; i ++)
    {
        b[i] = abs(a[i] - a[i - 1]);
    }
    sort(b + 1, b + n);    
    bool flag = true;
    for (int i = 1; i < n; i ++)
    {
        if (b[i] != i)
        {
            flag = false;
            break;
        }
    }
    if (flag) cout << "Jolly";
    else cout << "Not jolly";

    return 0;
}
2. C1154-计算鞍点-1
#include <bits/stdc++.h>
using namespace std;

int a[105][105];
int mx[105], mn[105]; // mx每行最大的值,mn每列最小的值 

int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++)
    {
        mx[i] = INT_MIN;
        for (int j = 1; j <= m; j ++)
        {
            cin >> a[i][j];
            if (a[i][j] > mx[i]) mx[i] = a[i][j];
        }
    }

    for (int j = 1; j <= m; j ++)
    {
        mn[j] = INT_MAX;
        for (int i = 1; i <= n; i ++)
        {
            if (a[i][j] < mn[j]) mn[j] = a[i][j];
        }
    }

    bool found = false;
    for (int i = 1; i <= n; i ++)
    {
        for (int j = 1; j <= m; j ++)
        {
            if (a[i][j] == mx[i] && a[i][j] == mn[j])
            {
                cout << i << ' ' << j << ' ' << a[i][j] << endl;
                found = true;
            }
        }
    }

    if (!found)
        cout << "not found";

    return 0;
}
3. C1155-IP网络-1
#include <bits/stdc++.h>
using namespace std;

unsigned int ips[1005];

void setBit(unsigned int &num, int pos)
{
    num = num | (1 << pos);
}

unsigned int get_mask(int n)
{
    // int mask[32];
    unsigned int mask = 0;
    for (int i = 31; i >= 0; i --)
    {
        int sum = 0;
        for (int j = 0; j < n; j ++)
        {
            sum += (ips[j] >> i) & 0x1;
        }
        if (sum == 0 || sum == n) setBit(mask, i);
        else break;
    }
    return mask;
}

void print_ip(unsigned int ip)
{
    for (int i = 0; i < 4; i ++)
    {
        cout << ((ip & 0xff000000) >> 24);
        if (i != 3) cout << ".";
        ip <<= 8;
    }    
}

int main()
{
    int n;
    while (cin >> n)
    {
        for (int i = 0; i < n; i ++)
        {
            unsigned int b1, b2, b3, b4;
            char dot;
            cin >> b1 >> dot >> b2 >> dot >> b3 >> dot >> b4;
            // cout << b1 << ' ' << b2 << ' ' << b3 << ' ' << b4 << endl;
            unsigned int ip = (b1 << 24) | (b2 << 16) | (b3 << 8) | b4;
            ips[i] = ip;
            // cout << ip << endl;
        }
        unsigned int mask = get_mask(n);
        print_ip(ips[0] & mask);
        cout << endl;
        print_ip(mask);

        cout << endl;
    }
    return 0;
}
4. C1156-立方体上色-1
#include <bits/stdc++.h>
using namespace std;

string s, s1, s2;

void r_x()
{
    // 1 2 6 5 => 2 6 5 1
    char temp = s1[1];
    s1[1] = s1[2];
    s1[2] = s1[6];
    s1[6] = s1[5];
    s1[5] = temp;
    // cout << s1 << endl;
}

void r_y()
{
    // 2 4 5 3 = > 4 5 3 2
    char temp = s1[2];
    s1[2] = s1[4];
    s1[4] = s1[5];
    s1[5] = s1[3];
    s1[3] = temp;    
    // cout << s1 << endl;
}

void r_z()
{
    // 1 4 6 3 = > 4 6 3 1
    char temp = s1[1];
    s1[1] = s1[4];
    s1[4] = s1[6];
    s1[6] = s1[3];
    s1[3] = temp;    
    // cout << s1 << endl;
}

int main()
{
    // freopen("1.out", "w", stdout);
    while (cin >> s)
    {
        s1 = s.substr(0, 6);
        s2 = s.substr(6, 6);
        s1 = " " + s1;
        s2 = " " + s2;
        // cout << s1 << ' ' << s2 << endl;
        bool flag = false;
        for (int x = 0; x < 4; x ++)
        {
            r_x();
            if (s1 == s2)
            {
                flag = true;
                goto A; 
            }
            for (int y = 0; y < 4; y ++)
            {
                r_y();
                if (s1 == s2)
                {
                    flag = true;
                    goto A; 
                }
                for (int z = 0; z < 4; z ++)
                {
                    r_z();      
                    if (s1 == s2)
                    {
                        flag = true;
                        goto A; 
                    }           
                }
            }
        }

        A:
        if (flag) cout << "TRUE";
        else cout << "FALSE";

        cout << endl;
    }

    return 0;
}

本节课答疑

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

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

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

目录