题目描述
Avery发现了一个藏宝图,从该藏宝图中,发现自己所在位置和宝藏以及宝藏的钥匙在同一个坐标轴上。Avery所在的位置坐标为0,宝箱的所在位置为x(1≤x≤100),钥匙所在的位置为 (1≤y≤100,x !=y)。显然,Avery迫切的想要快点打开宝箱,他可以执行很多操作。
以下操作是需要花时间的:
向左或者向右走一步(花费1秒钟)
以下操作是不需要花时间的:
如果Avery走到了宝箱或者钥匙的所在点,则可以拾起对应的物品(花费时间0)
Avery已经捡起了宝箱,将宝箱放到当前所在的坐标点(花费时间0)
Avery已经拿了钥匙,然后打开当前坐标点所在的宝箱(花费时间0)
也就是说除了移动是需要花费时间的,其它的操作都不需要花费时间。
Avery可以捡到宝箱后扛着走一段距离,但是宝箱非常重(因为里面有很多金币!),Avery最多只能扛着宝箱走k秒(放下并捡起并不会重置Avery的耐力)。
问,Avery打开宝箱所需的最短时间是多少?
输入
第一行包括一个整数t(1≤t≤100)——表示测试用例的数量。
每一组测试用例占一行,包括三个整数x,y和k(1≤x,y≤100,x !=y;0≤k≤100) —— 宝箱的初始点、钥匙所在的点以及Avery可以携带宝箱的最长时间。
输出
对于每一组测试用例,打印一个整数 —— Avery打开宝箱所需的最短时间。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x,y,k,num=0;
cin>>x>>y>>k;
if(y<x) cout<<x<<endl;
else{
num=x;
if(k!=0) num=num+(y-num)/k*k;
cout<<num+(y-num)*2<<endl;
}
}
return 0;
}
AC27%,求助