2020 10 23 个人赛
C题:
落了一个条件,啊啊啊,就WA了!
思路:模拟,计算出加油站前的距离sum1和加油站后的距离sum2,然后模拟每一趟路程,如果此时的油量能够支撑到达下一趟的加油站,就不用加油,否则就需要加油,其中最后一趟需要特判(只需要和这一趟比较即可)。
另外看题解的时候学会了位运算的意义:a<<b: a*(2^b) a>>b: a/(2^b)
代码如下:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ll n,i,j,k;
ll a,b,f;
cin>>a>>b>>f>>k;
if(f>b)
{
cout<<-1<<endl;
return 0;
}
ll sum1,sum2;
sum1=f-0;
sum2=a-f;
if(sum2>b)
{
cout<<-1<<endl;
return 0;
}
ll tank=b;
bool flag=1;
ll ans=0;
for(i=0;i<k-1;i++)
{
if(i&1)
{
if(tank<sum2)
{
flag=0;
break;
}
else if(tank>=(a+sum1))
{
tank-=a;
}
else
{
ans++;
tank=b-sum1;
}
}
else
{
if(tank<f)
{
flag=0;
break;
}
else if(tank>=(a+sum2))
{
tank-=a;
}
else
{
ans++;
tank=b-sum2;
}
}
}
if(i&1)
{
if(tank<sum2)
{
flag=0;
}
else if(tank>=sum2&&tank<a)
{
ans++;
}
else
{
;
}
}
else
{
if(tank<sum1)
{
flag=0;
}
else if(tank>=sum1&&tank<a)
{
ans++;
}
else
{
;
}
}
if(flag==0)
{
cout<<-1<<endl;
}
else
{
cout<<ans<<endl;
}
return 0;
}