Acwing64周赛+Leetcode306周赛
ACW
link题目链接
本周的周赛好像比较简单,可能是因为为csp模拟赛找一下信息的原因,很容易就ak
前面两题我就不说了,就是简单的return a+b
给定一个长度为 n
的整数数组 a1,a2,…,an
。
请你统计一共有多少个数组 a
的非空连续子数组能够同时满足以下所有条件:
该连续子数组的长度为偶数。
该连续子数组的前一半元素的异或和等于其后一半元素的异或和。
例如,当给定数组为 [1,2,3,4,5]
时,满足条件的连续子数组只有 1
个:[2,3,4,5]
。
输入格式
第一行包含整数 n
。
第二行包含 n
个整数 a1,a2,…,an
。
输出格式
一个整数,表示满足条件的连续子数组的数量。
数据范围
前三个测试点满足 2≤n≤10
。
所有测试点满足 2≤n≤3×105
,0≤ai<220
。
输入样例1:
5
1 2 3 4 5
输出样例1:
1
输入样例2:
6
3 2 2 3 7 6
输出样例2:
3
输入样例3:
3
42 4 2
输出样例3:
0
这题的话就是考的两个知识点: 前缀和 还有 异或运算;这里可以推导一下 利用前缀和 然后很容易就求解;
#define int long long
using namespace std;
int n,a,b,x,vx,vy;
map<pair<int,int>,int> Ch;
map<int,int> cnt;
signed main(){
cin>>n>>a>>b;
int ans=0;
for(int i=1;i<=n;i++){
cin>>x>>vx>>vy;
int c=a*vx-vy;
ans+=cnt[c]-Ch[{vx,vy}];
Ch[{vx,vy}]++;
cnt[c]++;
}
cout<<ans*2;
}
Leetcode
第一题的话就是简单的模拟方法很多,暴力即可
第二题就是对于每个点都进行一次遍历,然后找入度最小的位置
第三题可以用的方法很多,大多数都是暴力,或者dfs
我自己的解法目前还未看到类似的,首先就是令n+1都为单调上升的数组,对于连续的d记录初始位置和结束位置,在数组中对其翻转,即可实现
第四题原题,涉及到数位dp,感兴趣的可以去leetcode了解
这里就是acwing和leetcode的所有题目的个人解法,望指正