2 条题解
-
1
题目大意
略。
解题思路
注意到 这一项从 的两边开始到中间逐渐递增,这让我们发现一个性质:无论怎么操作,这段区间(长度为偶数)的交替和不会变。即
$$S_{l \ldots r}(x) = \sum_{i = l} ^ {r}(-1)^{i - l}a_{i} $$不会变。
那么我们该如何将这个性质推广至无论怎么操作,整个的交替和不会变?
考虑推导数学表达式。
$$\begin{aligned} S(x) &= \sum_{i = 1} ^ n (-1)^{i - 1}a_i \\ &= \sum_{i = 1} ^ {l - 1} (-1)^{i - 1}a_i + (-1)^{l - 1}\sum_{i = l} ^ r(-1)^{i - l}a_i + \sum_{i = r + 1} ^ n (-1)^{i - 1}a_i \\ &= \sum_{i = 1} ^ {l - 1} (-1)^{i - 1} a_i + \sum_{i = r + 1} ^ {n} (-1)^{i - 1} a_i + (-1)^{l - 1}S_{l \ldots r}(x). \end{aligned} $$可以看见,式子中出现了 项,故区间的结论可以推广至整体。
根据以上结论,我们只需分别计算数组 和数组 的交替和再比较是否相等即可。
复杂度分析
- 时间复杂度:。
- 空间复杂度:。
代码实现
不给了,请自行实现。
-
0
标题
思路
对 len>2 的区间进行操作是没有意义的,因为可以转为多次对len=2的区间进行操作。
所以我们只需要考虑当下,每次a[i]会受到上一次操作的影响增加 b[i-1]-a[i-1],遍历进行这些操作,最后判断a[n]是否等于b[n] 即可。
解题方法
复杂度
时间复杂度:
添加时间复杂度, 示例:
空间复杂度:
添加空间复杂度, 示例:
Code
#include <bits/stdc++.h> using namespace std; using ll =long long; const int maxn=1e5+5; int n; ll a[maxn],b[maxn]; void solve() { cin>>n; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=n;i++) { cin>>b[i]; a[i]+=b[i-1]-a[i-1]; } if(a[n]==b[n])cout<<"Yes\n"; else cout<<"No\n"; } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int t; cin>>t; while(t--) { solve(); } return 0; }
- 1
信息
- ID
- 111
- 时间
- 3000ms
- 内存
- 512MiB
- 难度
- 3
- 标签
- 递交数
- 786
- 已通过
- 155
- 上传者