bzoj 1127 貪心 懸線法

2021-07-27 19:26:02 字數 2586 閱讀 6168

題意:給定乙個n*n的矩陣,求乙個子矩陣滿足權值和屬於[k,2*k] (special judge )

思路棒極了(┙>∧

對乙個一維的[l,r],如果這個區間滿足 任取x, x

證明:因為這個區間裡,任意x均滿足x

所以不會存在乙個數,使得乙個連續的子區間的區間和加上它以後直接從小於k越過[k,2*k]的區間,瞬間達到大於k

所以只要找到這個[l,r],並從這個區間的左端或右端開始一一刪除判斷,就可以得到答案的區間

雖然這是一維下的結論,但是這個結論是可以拓展的ヽ(•̀ω•́ )ゝ

即:乙個子矩陣滿足 任取x,x

所以只要找到這個子矩陣,就可以模擬上面的方法刪一刪就能得到答案的區間,具體:

(1)如果是一行的話,退化成了一維問題,只要從左端或右端開始一一刪除判斷即可

(2)如果是個子矩陣的話,從最上一行或最下一行一行一行的刪除,直到刪得還剩一行,按上面的繼續處理

然後就是要o(n^2)的找到子矩陣,把大於2*k的點看做障礙點,用懸線法,得到最大子矩陣,一一判斷即可

當然,如果一開始讀入的時候,

如果乙個1*1的位置就已經滿足[k,2*k],直接輸出即可~(~o ̄▽ ̄)~o。。。

var

n,m :longint;

flag :boolean;

sum,map :array[0..2010,0..2010] of int64;

l,r,h :array[0..2010,0..2010] of longint;

i,j :longint;

function min(a,b:longint):longint;

begin

if a=m) and (map[i,j]<=2*m) then

begin

writeln(j,' ',i,' ',j,' ',i);

exit(true);

end;

exit(false);

end;

procedure cut(x1,y1,x2,y2:longint);

var i,j:longint;

begin

while get_sum(x1,y1,x2,y2)>2*m do

begin

if x1=x2 then dec(y2) else

if get_sum(x1+1,y1,x2,y2)>=m then inc(x1) else dec(x2);

end;

flag:=true;

writeln(y1,' ',x1,' ',y2,' ',x2);

end;

begin

read(m,n);

for i:=1 to n do

for j:=1 to n do read(map[i,j]);

if not check then

begin

for i:=1 to n do

for j:=1 to n do sum[i,j]:=map[i,j]+sum[i,j-1]+sum[i-1,j]-sum[i-1,j-1];

for i:=1 to n do

begin

for j:=1 to n do

if (map[i,j]>2*m) then l[i,j]:=0 else l[i,j]:=l[i,j-1]+1;

for j:=n downto 1 do

if (map[i,j]>2*m) then r[i,j]:=0 else r[i,j]:=r[i,j+1]+1;

end;

//for i:=2 to n do

for j:=1 to n do

if (map[i,j]<=2*m) and (map[i-1,j]<=2*m) then

begin

h[i,j]:=h[i-1,j]+1;

l[i,j]:=min(l[i,j],l[i-1,j]);

r[i,j]:=min(r[i,j],r[i-1,j]);

end;

//for i:=1 to n do

for j:=1 to n do

if (map[i,j]<=2*m) then

if (get_sum(i-h[i,j],j-l[i,j]+1,i,j+r[i,j]-1)>=m) then

begin

cut(i-h[i,j],j-l[i,j]+1,i,j+r[i,j]-1);break;

end;

if not flag then writeln('nie');

end;

end.

——by eirlys

貪心 bzoj 3008 象棋

本題的難點是 移動過程中不能出現多顆棋子同時在某一格的情況 事實上,可以忽略此條件,因為棋子是相同的,我們可以用合法的等效方案替代一棋子越過另一棋子的情況 a b c三格,a能在一步走到b,b也能在一步走到c。在a的棋子需要走到存在棋子的b,接著走到c。此情形我們可以看成在b的棋子先走到c,接著在a...

bzoj4029 貪心 定價

description 在市場上有很多商品的定價類似於 999 元 4999 元 8999 元這樣。它們和 1000 元 5000 元和 9000 元並沒有什麼本質區別,但是在心理學上會讓人感覺便宜很多,因此也是商家常用的 策略。不過在你看來,這種 十分荒謬。於是你如此計算乙個 p p 為正整數 的...

bzoj4850 貪心 燈塔

description jsoi的國境線上有n一座連續的山峰,其中第ii座的高度是hi?為了簡單起見,我們認為這n座山峰排成了連續一條 直線.如果在第ii座山峰上建立一座高度為p p 0 的燈塔,jyy發現,這座燈塔能夠照亮第jj座山峰,當且僅當滿足如 下不等式 hj hi p sqrt i j j...