bzoj 5010 Fjoi2017 矩陣填數

2022-04-30 06:51:07 字數 1838 閱讀 9442

給定乙個 h*w 的矩陣,矩陣的行編號從上到下依次為 1..h,列編號從左到右依次1..w。在這個矩陣中你需要在每

個格仔中填入 1..m 中的某個數。給這個矩陣填數的時候有一些限制,給定 n 個該矩陣的子矩陣,以及該子矩陣的

最大值 v,要求你所填的方案滿足該子矩陣的最大值為 v。現在,你的任務是求出有多少種填數的方案滿足 n 個限

制。兩種方案是不一樣的當且僅當兩個方案至少存在乙個格仔上有不同的數。由於答案可能很大,你只需要輸出答

案 對 1,000,000,007 的取模即可。

輸入資料的第一行為乙個數 t,表示資料組數。

對於每組資料,第一行為四個數 h,w,m,n。

接下來 n 行,每一行描述乙個子矩陣的最大值 v。每行為五個整

數 x1,y1,x2,y2,v,表示乙個左上角為(x1,y1),右下角為(x2,y2)的子矩陣的最大

值為 v ( 1≤x1≤x2≤h, 1≤y1≤y2≤w)

t≤5,1≤h,w,m≤10000,1≤v≤m,1≤n≤10

對於每組資料輸出一行,表示填數方案 mod 1,000,000,007 後的值。

23 3 2 2

1 1 2 2 2

2 2 3 3 1

4 4 4 4

1 1 2 3 3

2 3 4 4 2

2 1 4 3 2

1 2 3 4 4

2876475

————————————————————————————

這道題是道比較複雜的容斥 就奇減偶加 qaq 寫起來一堆細節而已qaq

#include#include

#include

#define ll long long

using

std::sort;

using

std::unique;

using

std::lower_bound;

const

int m=25,mod=1e9+7,n=507

;int

read()

while(c>='

0'&&c<='9')

return ans*f;

}int

n,m,k,ly,cnt;

struct posq[m];

intxs[m],xp,ys[m],yp,vs[m],vp;

intans[m][m],mv[m][m],h[m];

int pmod(ll a,int

b)

return

sum;

}void mins(int &x,int y)

intmain()

sort(xs,xs+xp); xp=unique(xs,xs+xp)-xs-1

; sort(ys,ys+yp); yp=unique(ys,ys+yp)-ys-1

; sort(vs,vs+vp); vp=unique(vs,vs+vp)-vs;

for(int i=0;ifor(int j=0;j1]-xs[i])*(ys[j+1]-ys[j]);

for(int i=0;i)

for(int s=0;s

for(int i=0;i0

;

for(int i=0;ifor(int j=0;jans[i][j];

for(int i=0;imod;

cnt=(ll)(cnt+sum)%mod;

}printf(

"%d\n

",(cnt+mod)%mod);

}return0;

}

view code

bzoj5010 FJOI2017 矩陣填數

給定乙個 h w 的矩陣,矩陣的行編號從上到下依次為 1.h,列編號從左到右依次1.w。在這個矩陣中你需要在每 個格仔中填入 1.m 中的某個數。給這個矩陣填數的時候有一些限制,給定 n 個該矩陣的子矩陣,以及該子矩陣的 最大值 v,要求你所填的方案滿足該子矩陣的最大值為 v。現在,你的任務是求出有...

Bzoj3924 Fjoi2015幻想鄉戰略遊戲

傲嬌少女幽香正在玩乙個非常有趣的戰略類遊戲,本來這個遊戲的地圖其實還不算太大,幽香還能管得過來,但是不知道為什麼現在的網遊廠商把遊戲的地圖越做越大,以至於幽香一眼根本看不過來,更別說和別人打仗了。在打仗之前,幽香現在面臨乙個非常基本的管理問題需要解決。整個地圖是乙個樹結構,一共有n塊空地,這些空地被...

FJOI2007 bzoj1002 輪狀病毒

description 輪狀病毒有很多變種,所有輪狀病毒的變種都是從乙個輪狀基產生的。乙個n輪狀基由圓環上n個不同的基原子 和圓心處乙個核原子構成的,2個原子之間的邊表示這2個原子之間的資訊通道。如下圖所示 n輪狀病毒的產生規律是在乙個n輪狀基中刪去若干條邊,使得各原子之間有唯一的資訊通道,例如共有...