周 赛 补 题

本文介绍了两场编程竞赛——AcWing第64场和力扣第306场的部分题目,包括A+B问题、三国语言分类、子数组异或和计算以及矩阵中的局部最大值和边积分最高的节点问题。文章通过代码示例展示了解题思路,同时表达了部分题目理解上的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

AcWing第64场周赛

1.A+B

2.三国语言

3.子数组的异或和

力扣第306场周赛

1.矩阵中的局部最大值

2.边积分最高的节点


AcWing第64场周赛

1.A+B

非常有难度的题,十分考察基础知识,而且无法用言语来讲解这个题

只能说看得懂就行,难以言喻了属于🤭

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    long a,b;
    cin >> a >> b;//输入a,b
    cout << a+b;//计算a+b
    return 0;
}

稍有不慎就会掉入题目的陷阱

2.三国语言

十分国际话的题目,考查对语言的掌握程度

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i ++ )
    {
        string sp;
        cin >> sp;
        int k=sp.length();
        if(sp[k-1]=='o') cout << "FILIPINO"<<endl;//菲律宾人特有的“o”
        else if(sp[k-1]=='u') cout << "JAPANESE"<<endl;//小日本特有的“u”
        else cout << "KOREAN"<<endl;//韩国特有的可以不判断
//观察末尾字母是否满足各国特征即可
    }
    return 0;
}

3.子数组的异或和

#include<iostream>
#include<algorithm>
#include<unordered_map>
using namespace std;
const int N =3e5+10;
int a[N],s[N];
int n;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)scanf("%d",&a[i]);
    unordered_map<int,int> s[2];
    s[0][0]++;
    long long res = 0,sum = 0;
    for(int i=1;i<=n;i++)
    {
        sum ^= a[i];//前i个数异或和
        res+=s[i%2][sum];//如果当前s[i%2][sum]为1,
                         //则该次加入答案
        s[i&1][sum]++;
    }
    printf("%lld\n",res);
    return 0;
}

(这题实在没看懂,主要是不知道异或和是什么东西,还得再看看,看明白了再来添加解析)

力扣第306场周赛

1.矩阵中的局部最大值

我的是暴力做法,既直接把每一个局部矩阵都遍历一遍

class Solution {
public:
    vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
        int n=grid.size();
        int m=grid[0].size();
        vector<vector<int>> k(n-2,vector<int>(m-2,0));
        for(int i=0;i<n-2;i++)
        {
            for(int j=0;j<n-2;j++)
            {
                vector<int> res{grid[i][j],grid[i+1][j],grid[i+2][j],grid[i][j+1],grid[i+1][j+1],grid[i+2][j+1],grid[i][j+2],grid[i+1][j+2],grid[i+2][j+2]};
                sort(res.begin(),res.end());
                k[i][j]=res[8];
            }
        }
        return k;
    }
};

我看多数人用的也是暴力XX啥的,就不放别人的了(主要是懒

2.边积分最高的节点

score记录每个节点的边积分,从后向前找最大

class Solution {
public:
    int edgeScore(vector<int>& edges) {
        int n = edges.size();
        vector<long long> score(n, 0);
        for(int i=0;i<n;i++){
            score[edges[i]] += 1ll * i;
        }
        long long vmax = 0, imax = 0;
        for(int i=n-1;i>=0;i--){
            if(score[i] >= vmax){
                vmax = score[i];
                imax = i;
            }
        }
        return imax;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值