差分应用(海底高铁)

题目描述

该铁路经过 N 个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票。第 i 段铁路连接了城市 i 和城市 i+1(1≤i

虽然一些事情没有协调好,各段铁路公司也为了方便乘客,推出了 IC 卡。对于第 ii 段铁路,需要花 Ci​ 博艾元的工本费购买一张 IC 卡,然后乘坐这段铁路一次就只要扣Bi​(Bi​

Uim 现在需要出差,要去 M 个城市,从城市 P1​ 出发分别按照P1​,P2​,P3​,⋯,PM​ 的顺序访问各个城市,可能会多次访问一个城市,且相邻访问的城市位置不一定相邻,而且不会是同一个城市。

现在他希望知道,出差结束后,至少会花掉多少的钱,包括购买纸质车票、买卡和充值的总费用。

输入格式

第一行两个整数,N,M。

接下来一行,M 个数字,表示 Pi​。

接下来 N-1 行,表示第 i 段铁路的 Ai​,Bi​,Ci​。

输出格式

一个整数,表示最少花费

这个题目主要的思路就是通过差分来记录每段路程走过的次数,然后一段一段的比较是办卡便宜还是买票便宜。

#include
#include
using namespace std;
#define N 10000000
#define ll long long
ll p[N]={0},n,m;
long long sum=0;
void insertt(int l,int r,int x)//差分记录经过的次数
{
    p[l]+=x;
    p[r]-=x;
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>n>>m;
    ll x;
    cin>>x;
    for(int i=2;i<=m;i++)
    {
        ll y;
        cin>>y;
        insertt(min(x,y),max(x,y),1);
        x=y;
    }
    for(int i=1;i>a>>b>>c;
        sum+=c+b*p[i]

你可能感兴趣的:(蓝桥杯,c++)