利用差分记录重复次数,op代表次数要达到多少买卡才更好
#include <bits/stdc++.h>
using namespace std;
int N,M;
int city[1000005];
int olp[100005];
int op[100005];
int p[100005];
int A[100005];
int B[100005];
int C[100005];
int temp[100005];
int ans;
int main()
{
cin >> N >> M;
city[0] = 1;
for(int i=1;i<=M;i++)
{
cin >> city[i];
int a = min(city[i],city[i-1]);
int b = max(city[i],city[i-1]);
olp[a]++;
olp[b]--;
}
for(int i=1;i<=N-1;i++)
{
cin >> A[i] >> B[i] >> C[i];
op[i] = ceil(C[i]/(A[i]-B[i]));
}
for(int i=1;i<=N-1;i++)
{
temp[i] = temp[i-1]+olp[i];
if(temp[i]>=op[i])
{
p[i] = C[i]+temp[i]*B[i];
}
else
{
p[i] = temp[i]*A[i];
}
ans+=p[i];
}
cout << ans;
return 0;
}
自己做了几个测试数据没问题,但样例output是6794,求高人指点呀!!!!!