日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces 374A - Inna and Pink Pony

發(fā)布時(shí)間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 374A - Inna and Pink Pony 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原題地址:http://codeforces.com/contest/374/problem/A

好久沒寫題目總結(jié)了,最近狀態(tài)十分不好,無論是寫程序還是寫作業(yè)還是精神面貌……NOIP掛了之后總覺得缺乏動(dòng)力精神難以集中……CF做的也是一塌糊涂,各種pretest passed + fail system test,該拿下的總是拿不下,都掉成Specialist了,也不知是什么原因,一點(diǎn)點(diǎn)盡力調(diào)整吧這是道水題,本來Div2的第一題就沒什么好總結(jié)的,但是這道題為整場(chǎng)比賽創(chuàng)造了無數(shù)Hack得分(不得不吐槽這場(chǎng)比賽整個(gè)就是一逗比……),而且最后AC的人數(shù)很少,覺得有必要把沒想清楚的地方捋一下,然后抽時(shí)間把之前幾場(chǎng)的題A掉然后把總結(jié)寫出來吧

?

題目大意:有一個(gè)n*m的方格,位于(i,j)位置上,每次能同時(shí)向上下方向移動(dòng)a并且向左右方向移動(dòng)b(必須同時(shí)向兩個(gè)方向移動(dòng)),求到達(dá)任意一個(gè)角上所需要的最小移動(dòng)次數(shù)((1,1),(1,m),(n,1),(n,m)中的任意一個(gè)),當(dāng)然,任何時(shí)候不可以移動(dòng)到方格外面

題目分析:非常顯然的,我們首先需要判斷是否有解。通過分析,我們發(fā)現(xiàn)當(dāng)出現(xiàn)以下情況時(shí),我們才可能得到解。

(1)當(dāng)初始位置在某個(gè)角上時(shí)(直接輸出0)

(2)初始位置不在角上時(shí),必須與某一個(gè)角的垂直距離為k*a,水平距離為t*b(k, t為正整數(shù)),且t與k奇偶性相同(原因很簡(jiǎn)單,我們必須移動(dòng)max(k, t)次,這個(gè)值顯然可能會(huì)比k和t中的某一個(gè)大,那樣我們必須在某一方向上先左移再右移(或者先上后下),這個(gè)過程需要進(jìn)行max(k, t) - min(k, t)次,每次操作必須包含兩次移動(dòng),所以它們奇偶性應(yīng)該相同)。

特別需要注意的是,我們必須在每個(gè)方向都可移動(dòng)(即走一步之后不會(huì)走出棋盤)

?

然后直接把上面的漢字翻譯成代碼就可以了

1 //date 20131218 2 #include <cstdio> 3 #include <cstring> 4 5 const int INF = 99999999; 6 7 inline int min(int a, int b){return a < b ? a : b;} 8 inline int max(int a, int b){return a > b ? a : b;} 9 10 int n, m, x, y, a, b; 11 12 int main() 13 { 14 //freopen("a.in", "r", stdin); 15 16 scanf("%d%d%d%d%d%d", &n, &m, &x, &y, &a, &b); 17 18 if((((x - 1) % a != 0) && ((n - x) % a != 0)) || (((y - 1) % b != 0) && ((m - y) % b != 0))) 19 { 20 printf("Poor Inna and pony!\n"); 21 return 0; 22 } 23 24 if(((x == 1) || (x == n)) && ((y == 1) || (y == m))) 25 { 26 printf("0\n"); 27 return 0; 28 } 29 30 int ans = INF; 31 32 if( (((x + a <= n) || (x - a > 0)) && ((y + b <= m) || (y - b > 0))) && (((x - 1) % a == 0) && ((y - 1) % b == 0)) && ((((x - 1) / a) & 1) == (((y - 1) / b) & 1))) 33 ans = min(ans, max((x - 1) / a, (y - 1) / b)); 34 35 if( (((x + a <= n) || (x - a > 0)) && ((y + b <= m) || (y - b > 0))) && (((x - 1) % a == 0) && ((m - y) % b == 0)) && ((((x - 1) / a) & 1) == (((m - y) / b) & 1))) 36 ans = min(ans, max((x - 1) / a, (m - y) / b)); 37 38 if( (((x + a <= n) || (x - a > 0)) && ((y + b <= m) || (y - b > 0))) && (((n - x) % a == 0) && ((y - 1) % b == 0)) && ((((n - x) / a) & 1) == (((y - 1) / b) & 1))) 39 ans = min(ans, max((n - x) / a, (y - 1) / b)); 40 41 if( (((x + a <= n) || (x - a > 0)) && ((y + b <= m) || (y - b > 0))) && (((n - x) % a == 0) && ((m - y) % b == 0)) && ((((n - x) / a) & 1) == (((m - y) / b) & 1))) 42 ans = min(ans, max((n - x) / a, (m - y) / b)); 43 44 if(ans == INF)printf("Poor Inna and pony!\n"); 45 else printf("%d\n", ans); 46 47 return 0; 48 }

?

收獲:還是不僅讀題要細(xì)致,考慮解決問題時(shí)應(yīng)該盡量各個(gè)方面都考慮到,寫完代碼仔細(xì)尋找BUG然后DEBUG,在高質(zhì)量和熟練度的基礎(chǔ)上再追求速度,不能一味求快,更要求穩(wěn)。最近沒少犯這樣的錯(cuò)誤。

轉(zhuǎn)載于:https://www.cnblogs.com/w007878/p/3484619.html

總結(jié)

以上是生活随笔為你收集整理的Codeforces 374A - Inna and Pink Pony的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。