专栏文章

题解:P12006 【MX-X10-T2】[LSOT-4] 网易云

P12006题解参与者 3已保存评论 7

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
7 条
当前快照
1 份
快照标识符
@miprftaa
此快照首次捕获于
2025/12/03 16:43
3 个月前
此快照最后确认于
2025/12/03 16:43
3 个月前
查看原文

前言

题目背景还是太超标了,跟我的年度曲风一模一样。
被做局了。

解题思路

  • 设第 ii 首歌的好听值为 xix_i,则题目给出的条件是 xi+xi+1=Six_i + x_{i+1} = S_i
  • 通过这些方程,我们可以用 x1x_1 表示所有的 xx。例如:
    • x2=S1x1x_2=S_1-x_1
    • x3=S2x2=S2S1+x1x_3=S_2-x_2=S_2-S_1+x_1
    • x4=S3x3=S3S2+S1x1x_4=S_3-x_3=S_3-S_2+S_1-x_1
    • 以此类推,可以发现 xix_i 可以表示为 (1)i+1x1+ci(-1)^{i+1}x_1+c_i,其中 cic_i 是由 SS 数组决定的常数。

过程分析

  • 总的好听值可以表示为 x1x_1 的线性函数:Ax1+BA\cdot x_1 + B,其中 AABB 是由听歌操作和 SS 数组决定的常数。
  • 如果 A=0A=0,那么总和与 x1x_1 无关,可以直接计算 BB
  • 如果 A0A\neq 0,则无法确定总和,输出 Impossible

最终计算

  • 对于每次听歌操作 ai,bia_i,b_i,对应的 xaix_{a_i} 的系数会增加 bib_i
  • xaix_{a_i} 表示为 (1)ai+1x1+cai(-1)^{a_i+1}x_1+c_{a_i},则总和中 x1x_1 的系数 AA 就为 i=1m(1)ai+1bi\sum_{i=1}^m (-1)^{a_i+1} b_i
  • 如果 A=0A=0,则总和为 B=i=1mbicaiB=\sum_{i=1}^m b_i\cdot c_{a_i}
是不是觉得很难?
其实主要代码只有 77 行,已经很简便了。

代码实现

前面讲的思路很详细,就不加注释了。
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int s[100010],sum[100010],n,m,a,b,A,B;
signed main(){
    cin>>n>>m;
    for(int i=1;i<n;i++){
        cin>>s[i];
        sum[i]=sum[i-1]+((i%2==1)?s[i]:-s[i]);
    }
    for(int i=0;i<m;i++){
        cin>>a>>b;
        A+=((a%2==1)?1:-1)*b;
        if(a>1){
            B+=b*((a%2==1)?sum[a-1]:-sum[a-1]);
        }
    }
    if(A!=0){
        cout<<"Impossible";
    }else{
        cout<<-B;
    }
    return 0;
}
~一下秒了。~
update:2025.8.3 发现格式不太好看,改了亿点。

评论

7 条评论,欢迎与作者交流。

正在加载评论...