题目链接:http://codeforces.com/problemset/problem/1082/A

 

题意:

有一本书,页码是1到n。当前页的页码是x,要翻到第y页。规定:每次只能翻d页,向前向后翻均可。
注:翻向第一页或者翻向最后一页的翻页操作可以无视上述规定。

 

思路:

这题其实就一个简单的模拟题。

总共只可能出现三种情况:

一、直接从x就可以翻到y

二、x先翻到1 ,再从1翻到y

三、x先翻到n,再从n翻到y

 

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdlib.h>
 4 #include <string>
 5 #include <string.h>
 6 #include <set>
 7 #include <queue>
 8 #include <stdbool.h>
 9 
10 #define LL long long
11 using namespace std;
12 const int maxn = 1000 + 10;
13 
14 
15 int main(){
16     int T;
17     int n,x,y,d;
18     scanf("%d",&T);
19     while (T--){
20         int cnt = 0;
21         int minxx = 0x3f3f3f3f;
22         scanf("%d%d%d%d",&n,&x,&y,&d);
23         if (abs(x - y) % d == 0)  // 如果直接就可以翻到
24             minxx = min(minxx,abs(x - y) / d);
25         if ((y - 1) % d == 0){ // 先翻到1再翻到y
26             cnt += (x - 1) / d + (y - 1) / d;
27             if((float)(x - 1)/ d != 0) // 如果不是整除的话就要再翻一次
28                 cnt++;
29             minxx = min(minxx,cnt);
30         }
31         cnt = 0;
32         if ((n - y) % d == 0){ // 先翻到n再翻到y
33             cnt += (n - y) / d + (n - x) / d;
34             if((float)(n - x)/ d != 0)
35                 cnt++;
36             minxx = min(minxx,cnt);
37         }
38         if (minxx == 0x3f3f3f3f)
39             printf("-1\n");
40         else
41             printf("%d\n",minxx);
42     }
43     return 0;
44 }