2 条题解

  • 1
    @ 2025-2-9 19:06:04

    题目大意

    略。

    解题思路

    注意到 ir+l2+12\displaystyle|i - \frac{r + l}{2}| + \frac{1}{2} 这一项从 alra_{l \ldots r} 的两边开始到中间逐渐递增,这让我们发现一个性质:无论怎么操作,这段区间(长度为偶数)的交替和不会变。即

    $$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} $$

    可以看见,式子中出现了 Slr(x)S_{l \ldots r}(x) 项,故区间的结论可以推广至整体。

    根据以上结论,我们只需分别计算数组 aa 和数组 bb 的交替和再比较是否相等即可。

    复杂度分析

    • 时间复杂度:O(Tn)O(Tn)
    • 空间复杂度:O(n)O(n)

    代码实现

    不给了,请自行实现。

    • 0
      @ 2025-2-19 17:18:27

      标题

      思路

      对 len>2 的区间进行操作是没有意义的,因为可以转为多次对len=2的区间进行操作。

      所以我们只需要考虑当下,每次a[i]会受到上一次操作的影响增加 b[i-1]-a[i-1],遍历进行这些操作,最后判断a[n]是否等于b[n] 即可。

      解题方法

      复杂度

      时间复杂度:

      添加时间复杂度, 示例: O(n)O(n)

      空间复杂度:

      添加空间复杂度, 示例: O(n)O(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

      「TAOI-3」终有一天,飞向水平线的彼方

      信息

      ID
      111
      时间
      3000ms
      内存
      512MiB
      难度
      3
      标签
      递交数
      786
      已通过
      155
      上传者