鱼C论坛

 找回密码
 立即注册
查看: 941|回复: 1

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

[复制链接]
发表于 2023-11-9 16:18:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<bits/stdc++.h>
using namespace std;
int n,m,p,c[100005],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[p1]++,c[p2]--;
                 else c[p2]++,c[p1]--;
                 p1=p2;
        }
        for(int i=1;i<n;i++)
        {
                sum+=c[i];
                cin>>a>>b>>c1;
                if(sum!=0)ans+=min(a*sum,b*sum+c1);
        }
        if(m<=1)ans=0;
        cout<<ans;
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[p1]加1,c[p2]减1;如果p1大于等于p2,则将c[p2]加1,c[p1]减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计算得出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 11:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表