1. 程式人生 > >CF 1036 B Diagonal Walking v.2 —— 思路

CF 1036 B Diagonal Walking v.2 —— 思路

自己 判斷 一個 get lan 題目 方向 -- def

題目:http://codeforces.com/contest/1036/problem/B

題意:從 (0,0) 走到 (n,m),每一步可以向八個方向走一格,問恰好走 k 步能否到達,能到達則輸出最多能走多少斜步;

自己想得太復雜了...

首先,判斷 -1 就看橫縱距離中的較大值是否大於 k ,因為最少走 max(n,m) 步可以到達;

設 m > n;

如果 m - n 為奇數,那麽顯然會有一步必須直著走,那麽 k --;

這裏可以通過走法來調節剩余步數的奇偶,就是直著走過去或者拐一下走過去的區別,所以到達後不會再有 k 的損失;

如果 m - n 為偶數,首先可以全部斜著走過去;

到達以後的剩余步數如果是偶數,那麽來回進出終點,不會有斜著走的損失;

如果是奇數,則會損失兩步,會有兩個直著走的步來代替一個斜著走;

這題就做完了-_-

CF 1036 B Diagonal Walking v.2 —— 思路