DTOJ 5164 鬼淵傳說

2021-10-25 09:42:13 字數 2320 閱讀 2777

題面暫缺。

題解:首先,對於不合法,有兩種情況,分別處理。

①內含白色連通塊。此時 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皇后問題 五 都了解什麼深層神經網路,分別運用在...