这道题大概是说,人一开始在北京,在每一个特定的日子就需要返回上海。
题目说的所谓要提前一天坐飞机和在那一天之后的一天再返回没有任何意义。
去上海和返回北京都需要机票钱,最后必须返回北京,人在北京每一天都有工资,如果去了上海,那么就得不到这一天的工资。
有很多个这样需要返回上海的日子,需要判断
如果两次需要返回上海的日子的间隔期间不能挣的工资钱小于往返的机票钱,那么人就不需要返回北京
最后题目所求的最小cost总的来说就是求最少花费的钱,包括所耽误的不能挣的工资钱,往返的机票钱
#include<iostream>
#include<algorithm>
using namespace std;
int date[100001];
int main()
{
ios::sync_with_stdio(false);
int t;
cin>>t;
for(int j=1;j<=t;j++)
{
int n,a,b;
unsigned long long cost=0;
//注意这里使用了unsigned long long 数据,如果数据使用的范围小了,就不会ac
cin>>n>>a>>b;
for(int i=0;i<n;i++)
{
cin>>date[i];
}
cost+=(a*2+b);
for(int i=0;i<n-1;i++)
{
cost+=min((date[i+1]-date[i])*b,2*a+b);
}
cout<<"Case #"<<j<<": "<<cost<<endl;
}
return 0;
}
注意在上面的代码中使用了这样一条语句
ios::sync_with_stdio(false);
如果不使用这样一条语句,就会超时
原因如下
因为C++中,cin和cout要与stdio同步,中间会有一个缓冲,所以导致cin,cout语句输入输出缓慢,这时就可以用这个语句,取消cin,cout与stdio的同步,说白了就是提速,效率基本与scanf和printf一致。然后就可放心的使用cin,cout了。(不过实际上使用了using namespace std;之后就可以直接打ios::sync_with_stdio(false);了)
ios::sync_with_stdio(false);加在cin和cout之前
当然,除了加入这条语句,还有另一种提高速度的办法,那就是将代码中的所有cout和cin语句换成printf和scanf