题目链接: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 "); 40 else 41 printf("%d ",minxx); 42 } 43 return 0; 44 }