A. Vasya and Book ( Codeforces Educational Codeforces Round 55 )
阿新 • • 發佈:2018-12-16
題意:當前在看書的第 x 頁,每次可以向前或者向後翻 d 頁,這個書一共 n 頁,問能否用最小操作翻到第 y 頁。
題解:三種情況:1、直接翻能到的一定最短。 2、先翻到第一頁,然後往後翻,翻到第 y 頁。3、先翻到第 n 頁,然後往前翻,翻到第 y 頁。
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { int ans,t,n,x,y,d; cin >> t; while(t--) { ans = 0; cin >> n >> x >> y >> d; if(abs(x-y) %d == 0) { ans = abs(x-y) / d; printf("%d\n",ans); continue; } else { int x1; if(x % d == 0) x1 = x /d; else x1 = x / d +1; if((y-1) % d == 0) { x1 += (y-1) / d; } else x1 = -1; int x2; if(abs(n - x) % d == 0) x2 = abs(n - x) / d; else x2 = abs(n - x) / d + 1; if((n-y)%d==0) { x2 += (n-y)/d; } else x2 = -1; if(x1 == -1 && x2 == -1) ans = -1; else if(x1 == -1 && x2 >= 0) ans = x2; else if(x2 == -1 && x1 >= 0) ans = x1; else ans = min(x1,x2); printf("%d\n",ans); } } return 0; }