那麼這一道題我在考試的時候寫掛了(0分 嗚嗚~)
我原來的思路是廣搜來騙取部分分(哈哈~)
但是我忘記了乙個非常重要的問題
我廣搜開的陣列沒有考慮負的下標
下一次考試如果再寫暴力
就可以把座標都加上乙個數就行了~
那麼這一道題 n<=10^6 每乙個點的座標在 ±10^18次方之間
那麼這個資料範圍就很尷尬了
廣搜深搜。。。都肯定不行!
那麼應該咋辦呢??
我們來想一下
假如要從 (sx,sy) 走到 (ex,ey)
移動分為被動和主動
其實只要主動走的方向和被動走的方向是正好相反的
那麼醉漢就待在原地不動了
也就是說
假如醉漢到家的最短時間是t
那麼t+1他也同樣能到家
t+2 t+3 t+4....只要醉漢想待下去,就可以一直待在原地
我們來看乙個數軸
t往右的都可以往左的則不行
這就滿足了可二分性
可以進行二分答案
10^18 二分也就最多30次
當然不超時咯,很快就會出答案
那麼每乙個時間怎麼來判斷它是不是成立呢
首先從起點到終點我們可以算乙個曼哈頓距離
然後醉漢的移動是有週期的
比如sszx
那麼乙個週期下來相當於向上移動了一格,向左移動了一格
t/n的就可以直接計算出來
t%n的就直接模擬一下就行了
二分答案在確定當前列舉的步數t是否成立時,可以先把原座標被動移動後的新座標求出來 然後再求曼哈頓距離,判斷是否小於等於t
加油~
/*那麼這一道題我在考試的時候寫掛了(0分 嗚嗚~)
我原來的思路是廣搜來騙取部分分(哈哈~)
但是我忘記了乙個非常重要的問題
我廣搜開的陣列沒有考慮負的下標
下一次考試如果再寫暴力
就可以把座標都加上乙個數就行了~
那麼這一道題 n<=10^6 每乙個點的座標在 ±10^18次方之間
那麼這個資料範圍就很尷尬了
廣搜深搜。。。都肯定不行!
那麼應該咋辦呢??
我們來想一下
假如要從 (sx,sy) 走到 (ex,ey)
移動分為被動和主動
其實只要主動走的方向和被動走的方向是正好相反的
那麼醉漢就待在原地不動了
也就是說
假如醉漢到家的最短時間是t
那麼t+1他也同樣能到家
t+2 t+3 t+4....只要醉漢想待下去,就可以一直待在原地
我們來看乙個數軸
t往右的都可以往左的則不行
這就滿足了可二分性
可以進行二分答案
10^18 二分也就最多30次
當然不超時咯,很快就會出答案
那麼每乙個時間怎麼來判斷它是不是成立呢
首先從起點到終點我們可以算乙個曼哈頓距離
然後醉漢的移動是有週期的
比如sszx
那麼乙個週期下來相當於向上移動了一格,向左移動了一格
t/n的就可以直接計算出來
t%n的就直接模擬一下就行了
二分答案在確定當前列舉的步數t是否成立時,可以先把原座標被動移動後的新座標求出來 然後再求曼哈頓距離,判斷是否小於t
加油~*/
#include
using
namespace
std;
string
s;int
movx,movy;
long
long
sx,sy,ex,ey;
intn;
int check(long
long
t) x+=movx;
y+=movy;
ans+=abs(ex-x);
ans+=abs(ey-y);
if(ans<=t)
return1;
return0;
}void
turning()
}int
main()
else
l=mid+1
; }
if(flag==0
) cout
<
return0;
}
NOIP2012提高組Day1T2 國王遊戲
國王遊戲 描述恰逢 h 國國慶,國王邀請 n 位大臣來玩乙個有獎遊戲。首先,他讓每個大臣在左 右手上面分別寫下乙個整數,國王自己也在左 右手上各寫乙個整數。然後,讓這 n 位大臣排成一排,國王站在隊伍的最前面。排好隊後,所有的大臣都會獲得國王獎賞的若干金幣,每位大臣獲得的金幣數分別是 排在該大臣前面...
D班集訓day1t2 道路分組(貪心)
比較簡單的一道題。因為分組必須連續,故可以直接貪心。能加則加,不能加則不加,更新可以用類似於增廣的思想去做 include using namespace std define rep i,j,k for int i j i k i define repp i,j,k for int i j i k...
暑假集訓 Day5 T1 羊圈
時間限制 1 sec 記憶體限制 512 mb 題目描述 zyc的農場有n 1 n 100,000 塊連續的區域排成一排,每塊區域上都有確定數量的羊 每塊區域不超過2000千隻 現在zyc想要將一些區域用圍牆圍起來,作為資訊社的優秀成員,當然要給自己出點難題 他希望圍起來的區域裡羊的總數 區域數的值...