題面暫缺。
題解:首先,對於不合法,有兩種情況,分別處理。
①內含白色連通塊。此時 o(n
2)
o(n^2)
o(n2
) 暴搜所有白色連通塊以及最小包含子矩形。可以發現,答案矩形不能包含子矩形。這時考慮優化 o(n
4)
o(n^4)
o(n4
) 暴力。
我們只用列舉上、下、左邊界,最大右邊界可以發現對於左邊界是單調增的。這時我們用桶維護。
②包含兩個及以上的黑色連通塊。這時我們可以發現對於兩列 r
rr 和 r+1
r+1r+
1,假如我們把這兩列合併,可以發現若右邊界滿足①,那麼和並這兩列一定是合法的,不然必須有白色連通塊內含。所以我們可以算出 δsz
\delta sz
δsz 的字首和,就可以支援 o(1
)o(1)
o(1)
查詢左端點的答案。
#include
#define n 305
using
namespace std;
inline
intread()
while
(s>=
'0'&&s<=
'9')
return x*f;
}int a[n]
[n],b[n]
[n],n,m,lx,ly,rx,ry,flag,st;
char s[n]
;struct nodesq[n*n]
;inline
bool
cmp(node a,node b)
int dx=
;int dy=
;inline
intpd
(int x,
int y)
void
dfs(
int x,
int y)
if(b[tx]
[ty]
)continue
;dfs
(tx,ty);}
}int ccl[n]
[n],fa[n*n*3]
,cnt1[n]
,cnt2[n]
,sum[n]
,tong[n*n<<1]
,zero=n*n,tl[n]
;inline
intid1
(int x,
int y)
inline
intid2
(int x,
int y,
int typ)
inline
intget
(int x)
long
long ans;
intmain()
}for
(int i=
1;i<=n;
++i)}}
}sort
(sq+
1,sq+
1+st,cmp)
;for
(int ux=
1,top=
1;ux<=n;
++ux)
for(
int i=
1;i<=m;
++i)
for(
int i=m-
1;i;
--i)tl[i]
=min
(tl[i]
,tl[i+1]
);for(
int i=
1;i<=m;
++i)
}for
(int i=
2;i<=m;
++i)}if
(a[dx]
[i])}if
(a[dx]
[i-1
]&&a[dx]
[i])
} sum[i]
=cnt2[i]
-cnt1[i-1]
;}for(
int i=
2;i<=m;
++i)sum[i]
+=sum[i-1]
;int l=m,r=m;
for(
;l;--l)
while
(r)tong[sum[r]
+zero]--,
--r;
//memset(tong,0,sizeof(tong));
//for(int i=1;i<=m;++i)cout}printf
("%lld\n"
,ans)
;return0;
}
DTOJ 4019 白玉樓前
白玉樓前 題目背景 一覺醒來怎麼半靈又不見了?一定是幽幽子吃了。幽幽子你給我吐出來!我這邊有個遊戲玩不過去,你幫我玩過去我就吐出來。題目描述 妖夢現在要玩幽幽子的遊戲,她才能拿回自己的半靈。遊戲規則是這樣的 幽幽子有n nn 個點,現在她讓妖夢對每個點隨機一條出邊 隨機到每個點的概率都相等 然後得到...
DTOJ5057 英雄聯盟
小 l 和小 c 在玩 wild rift。眾所周知,wild rift 中的暴擊是非常不靠譜的。他會在一開始設定乙個引數 x 如果第一刀不暴,則第二刀的暴率增加到初始值的 2 倍 如果還是不暴,就繼續增加到初始值的 3 倍,以此類推,當疊加到 100 以上的時候,預設下一發一定暴擊。當一次觸發了暴...
5 16 微軟 機器學習崗
一 單詞反轉 將字串單詞反轉輸出,例如 str how are you output you are how 二 s1和s2兩個字串,查詢兩個字串中的共用子串 三 遍歷二叉樹,從左到右分別展示,從葉子節點向根節點分別展示 用遞迴方法實現中序遍歷 四 n皇后問題 五 都了解什麼深層神經網路,分別運用在...