Educational Codeforces Round 55 (Rated for Div. 2)A-- Vasya and Book
Whiteying
2018-11-30 20:35:47
# 题目链接:
http://codeforces.com/contest/1082/problem/A
# 题意:
一本书有n页,你现在在a页,你想翻到b页,每次只能翻c页,
向前翻最多翻到第一页,向后翻最多翻到第n页。问你是否能翻到第b页,如果能的话输出最少翻页的次数。
# 思路:
### 又TM是赛后过题(╯‵□′)╯︵┻━┻
到达b页的三种状态:
1. 从a页翻到b页
1. 从a页翻到第一页再翻到第b页
1. 从a页翻到第n页再翻到第b页
搞清楚就很好办了
这个题的坑主要是检验三种状态哪个翻的次数少,平下心来慢慢扣,肯定能过的
**ヾ(◍°∇°◍)ノ゙**
# AC代码:
```
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
#include<algorithm>
#include<queue>
typedef long long ll;
#include<vector>
#define cin(n) scanf("%lld",&(n))
#define cout(n) printf("%lld",(n))
#define couc(c) printf("%c",(c))
#define coutn printf("\n")
#define cout_ printf(" ")
ll t,n,a,b,d;
int main()
{
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>n>>a>>b>>d;
ll ans1=abs(b-a);
ll ans2=abs(a-1);
ll ans3=abs(b-1);
ll ans4=abs(n-a);
ll ans5=abs(n-b);
if(ans1%d==0)
{
cout<<ans1/d<<endl;
continue;
}
if(ans3%d==0&&ans5%d==0)
{
ll ans6=ans2/d+(bool)(ans2%d)+ans3/d+(bool)(ans3%d);
ll ans7=ans4/d+(bool)(ans4%d)+ans5/d+(bool)(ans5%d);
if(ans6>ans7)
cout<<ans7<<endl;
else
cout<<ans6<<endl;
continue;
}
if(ans3%d==0)
{
ll ans6=ans2/d+(bool)(ans2%d)+ans3/d+(bool)(ans3%d);
cout<<ans6<<endl;
continue;
}
if(ans5%d==0)
{
ll ans7=ans4/d+(bool)(ans4%d)+ans5/d+(bool)(ans5%d);
cout<<ans7<<endl;
continue;
}
else
{
cout<<"-1"<<endl;
}
}
return 0;
}
```