3 条题解
-
8
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+5; int a[N],b[N],d[N];//B铁路经过次数,D是B的差分数组,A是路线数组 int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i];//输入路线数组 for(int i=1;i<m;i++){//遍历路线,m个城市,走m-1段铁路 int l=a[i],r=a[i+1];//l为当前城市,r为要去的城市 if(l>r) swap(l,r);//如果当前城市大于要去的城市,交换编号,方便差分操作 d[l]++;//差分基操 d[r-1+1]--;//l城市r城市,需要经过l到r-1段铁路,差分基操 } ll ans=0;//统计总钱数 for(int i=1;i<n;i++){//n个城市,一共有n-1段铁路 b[i]=b[i-1]+d[i];//还原每条铁路经过的次数 ll x,y,z; cin>>x>>y>>z;//输入每条铁路需要的,单程票,充值金额,卡费 ans+=min(b[i]*x,z+b[i]*y);//总金额+=最小值(单程票*次数,卡费+充值金额*次数) } cout<<ans; return 0; } -
1
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+5; int a[N],b[N],d[N];//B铁路经过次数,D是B的差分数组,A是路线数组 int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i];//输入路线数组 for(int i=1;i<m;i++){//遍历路线,m个城市,走m-1段铁路 int l=a[i],r=a[i+1];//l为当前城市,r为要去的城市 if(l>r) swap(l,r);//如果当前城市大于要去的城市,交换编号,方便差分操作 d[l]++;//差分基操 d[r-1+1]--;//l城市r城市,需要经过l到r-1段铁路,差分基操 } ll ans=0;//统计总钱数 for(int i=1;i<n;i++){//n个城市,一共有n-1段铁路 b[i]=b[i-1]+d[i];//还原每条铁路经过的次数 ll x,y,z; cin>>x>>y>>z;//输入每条铁路需要的,单程票,充值金额,卡费 ans+=min(b[i]*x,z+b[i]*y);//总金额+=最小值(单程票*次数,卡费+充值金额*次数) } cout<<ans; return 0; } -
-1
#include<bits/stdc++.h> #define ll long long using namespace std; const int N=1e5+5; int a[N],b[N],d[N];//B铁路经过次数,D是B的差分数组,A是路线数组 int main(){ int n,m; cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i];//输入路线数组 for(int i=1;i<m;i++){//遍历路线,m个城市,走m-1段铁路 int l=a[i],r=a[i+1];//l为当前城市,r为要去的城市 if(l>r) swap(l,r);//如果当前城市大于要去的城市,交换编号,方便差分操作 d[l]++;//差分基操 d[r-1+1]--;//l城市r城市,需要经过l到r-1段铁路,差分基操 } ll ans=0;//统计总钱数 for(int i=1;i<n;i++){//n个城市,一共有n-1段铁路 b[i]=b[i-1]+d[i];//还原每条铁路经过的次数 ll x,y,z; cin>>x>>y>>z;//输入每条铁路需要的,单程票,充值金额,卡费 ans+=min(b[i]*x,z+b[i]*y);//总金额+=最小值(单程票*次数,卡费+充值金额*次数) } cout<<ans; return 0; }
- 1
信息
- ID
- 691
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 5
- 标签
- 递交数
- 18
- 已通过
- 8
- 上传者