題意:給定乙個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...