目录
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;
}
};