lsmCC 发表于 2023-11-9 16:18:37

代码注释,以及怎么使用了前缀和的思想跟差分数组

#include<bits/stdc++.h>
using namespace std;
int n,m,p,c,p2,p1,a,b,c1;
long long sum,ans;
int main()
{
        cin>>n>>m;
        if(m>0)cin>>p1;
        for(int i=2;i<=m;i++)
        {
                cin>>p2;
               if(p1<p2)c++,c--;
               else c++,c--;
               p1=p2;
        }
        for(int i=1;i<n;i++)
        {
                sum+=c;
                cin>>a>>b>>c1;
                if(sum!=0)ans+=min(a*sum,b*sum+c1);
        }
        if(m<=1)ans=0;
        cout<<ans;
        return 0;
}

isdkz 发表于 2023-11-9 16:20:02

这段代码是一个使用前缀和思想和差分数组的例子。下面是对代码的详细解释:

1. 首先,代码包含了一些头文件,使用了命名空间std。
2. 定义了一些变量,包括n、m、p、c、p2、p1、a、b和c1。其中,n和m分别表示输入的两个整数,p表示一个位置,c是一个差分数组,p2和p1是用来记录输入的前一个位置和当前位置的变量,a、b和c1是用来记录输入的三个整数的变量。
3. 主函数开始,首先输入n和m。
4. 如果m大于0,输入p1。
5. 接下来的for循环从2到m,每次输入p2,并根据p1和p2的大小关系,对差分数组c进行操作。如果p1小于p2,则将c加1,c减1;如果p1大于等于p2,则将c加1,c减1。然后将p1更新为p2。
6. 接下来的for循环从1到n-1,每次进行如下操作:
   · 将差分数组c[ i]累加到变量sum中。
   · 输入a、b和c1。
   · 如果sum不等于0,则根据给定的公式计算ans的值,ans等于a乘以sum和b乘以sum加c1中的较小值。
7. 如果m小于等于1,将ans设为0。
8. 输出ans。
9. 返回0,表示程序运行结束。

这段代码的作用是根据输入的n、m和一些整数,计算出一个值ans并输出。其中,差分数组c用来记录位置之间的差值,前缀和sum用来累加差分数组的值,ans根据sum和输入的a、b和c1计算得出。
页: [1]
查看完整版本: 代码注释,以及怎么使用了前缀和的思想跟差分数组