Educational Codeforces Round 55 (Rated for Div. 2)A-- Vasya and Book

Whiteying

2018-11-30 20:35:47

Personal

# 题目链接: 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; } ```