周 赛 补 题

AcWing第61场周赛

1.分糖果

感觉没什么技术含量,照着做就好了,但要注意值的范围

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

using namespace std;

const int N = 1010;
long long a[N][3];

int main()
{
    int n;
    cin >> n;
    for (int i = 0; i < n; i ++ )
    {
        for (int j = 0; j < 3; j ++ )
        scanf("%ld",&a[i][j]);
    }
    for (int i = 0; i < n; i ++ )
    {
        long long sum;
        sum=(a[i][0]+a[i][1]+a[i][2])/2;
        printf("%ld",sum);
        cout << endl;
    }
    return 0;
}

然后我看了一下题解🤯,我的第一个明显太杂了,优化一下其实不要多少代码

#include<bits/stdc++.h>
using namespace std;

int main()
{
    long long n,i;
    cin>>n;
    while(n--){
        long long a,b,c;
        cin>>a>>b>>c;
        cout<<(a+b+c)/2<<'\n';
    }
}

附上题解大佬的一句劝诫🌹

2.《指 针》

 

 很抽象的一个题,大概意思是给定次数和没次的角度,通过顺时针或逆时针,看最后指针能否回到0(达到360的倍数即可)

采用二进制枚举的方法,遇到1就+,遇到0就减,最后看被处理数能不能整除360就完事了👌

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

using namespace std;
const int N = 30;
int a[N];
int n,res;
int main()
{
    cin >> n;
    for(int i = 0; i < n; i ++ )
        cin >> a[i];
    for(int i = 0; i <1 << n ; i ++ )
    {
        res = 0;
        for(int j = 0; j < n; j ++ )
        {
            if((1 << j) & i)
                res += a[j];
            else
                res -= a[j];
        }
        if(res % 360 == 0)
        {
            cout << "YES" << endl;
            return 0;
        }
    }
    cout << "NO" << endl;
    return 0;
}

力扣第303场周赛

1.第一次出现两次的字母

构造一个map<char,int> mp,然后将s里的字母在mp里计算出现次数,只要遇到出现2次的字母就返回,可能就考察哈希表吧😂

class Solution {
public:
    char repeatedCharacter(string s) {
        map<char,int> mp;
        int n=s.length();
        for(int i=0;i<n;i++)
        {
            mp[s[i]]++;
            if(mp[s[i]]==2) return s[i];
        }
        return 0;
    }
};

2.相等行列对

看到一个超级巧妙的方法🤯

构造一个新矩阵,然后将原矩阵转置存入新矩阵,再用新矩阵和原矩阵比较就可以找到题目所要求的行列相等对

class Solution {
public:
    int equalPairs(vector<vector<int>>& grid) {
        int ans = 0;
        vector<vector<int>> grid2(grid.size(), vector<int>(grid.size()));
        for (int i = 0; i < grid.size(); i++)
            for (int j = 0; j < grid.size(); j++)
                grid2[i][j] = grid[j][i];
        for (int i = 0; i < grid.size(); i++)
            for (int j = 0; j < grid.size(); j++)
                if (grid[i] == grid2[j])
                    ans++;
        return ans;
    }
};

有一说一这太酷了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值