codeforces 374A Inna and Pink Pony 解题报告
生活随笔
收集整理的這篇文章主要介紹了
codeforces 374A Inna and Pink Pony 解题报告
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題目鏈接:http://codeforces.com/problemset/problem/374/A
題目意思:給出一個(gè) n 行 ?m 列 的棋盤(pán),要將放置在坐標(biāo)點(diǎn)為(i, j)的 candy 移動(dòng)到四個(gè)角落(1,1),(1,m),(n, 1),(n, m) 中的其中一個(gè)。假設(shè)當(dāng)前在位置(x, y),規(guī)定每次移動(dòng)遵循,(x+a, y+b) 、 (x+a, y-b)、 (x-a, y+b)、(x-a, y-b)。求最小的移動(dòng)次數(shù)。
? ? 求出 (i, j) 到每個(gè)角落的距離diff_x, diff_y,而且diff_x 必須要除得盡 a, diff_y除得盡 b,這個(gè)很好理解,次數(shù)嘛~~~除此,除完之后這兩個(gè)值必須是同奇或同偶。還有就是移動(dòng)的時(shí)候不能超出邊界,在邊界時(shí)的特判了~~~~
? ? A題都不簡(jiǎn)單啊~~~
? ??
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cmath> 5 #include <limits.h> 6 using namespace std; 7 8 int n, m, i, j, a, b; 9 10 int check(int corner_x, int corner_y) 11 { 12 if (corner_x == i && corner_y == j) 13 return 0; 14 if (i + a > n && i - a < 1 || j + b > m && j - b < 1) // 邊界處理 15 return INT_MAX; 16 int diff_x = abs(corner_x - i); 17 int diff_y = abs(corner_y - j); 18 if (diff_x % a || diff_y % b) // 步數(shù)要為整數(shù) 19 return INT_MAX; 20 int div_x = diff_x / a; 21 int div_y = diff_y / b; 22 if ((!(div_x&1) && div_y&1) || (div_x&1) && !(div_y&1)) // 移動(dòng)的次數(shù)要同時(shí)為奇數(shù)或偶數(shù) 23 return INT_MAX; 24 return max(div_x, div_y); 25 } 26 27 int main() 28 { 29 #ifndef ONLINE_JUDGE 30 freopen("input.txt", "r", stdin); 31 #endif 32 while (scanf("%d%d%d%d%d%d", &n, &m, &i, &j, &a, &b) != EOF) 33 { 34 int ans = INT_MAX; 35 ans = min(check(1,1), check(1,m)); 36 ans = min(ans, check(n,1)); 37 ans = min(ans, check(n,m)); 38 if (ans == INT_MAX) 39 printf("Poor Inna and pony!\n"); 40 else 41 printf("%d\n", ans); 42 } 43 return 0; 44 }?
轉(zhuǎn)載于:https://www.cnblogs.com/windysai/p/4060891.html
總結(jié)
以上是生活随笔為你收集整理的codeforces 374A Inna and Pink Pony 解题报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ 1101: [POI2007]
- 下一篇: easyui 初体验