FJOI2017 矩陣填數 (容斥原理)

2022-07-08 04:54:15 字數 950 閱讀 3600

題目傳送門

現在看來熊貓杯的j題原來是個容斥套路題,按照值域排序後根據值域劃分方塊數,列舉子集容斥計算即可。

#include#includeusing namespace std;

const int p = 1e9 + 7;

const int n = 1100;

struct matrix

int cal()

void read()

bool operator <(const matrix &ret)

void operator |(const matrix &ret)

}mat[15];

int h, w, n, m;

int s[n], u[n], num[n];

int qpow(int x, int k)

return ans;

}void solve();

for(int t = i, j = 1; t; t >>= 1, ++j)

if(tt.check()) s[i] = tt.cal();

}// 求並集

for(int i = 1, up = 1 << n; i < up; ++i)

}// 劃分值域容斥計算

// now是目前列舉的集合,pre是之前列舉過的集合

int now = 0, pre = 0, ans = 1;

for(int i = 1; i <= n; ++i)

ans = 1ll * ans * sum % p;

pre |= now;

now = 0;

}printf("%d\n", 1ll * ans * qpow(m, h * w - u[(1 << n) - 1]) % p);

}void clr()

int main()

}

bzoj 5010 Fjoi2017 矩陣填數

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

bzoj5010 FJOI2017 矩陣填數

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

hihcoder 1480 矩陣填數

1.題目鏈結。小hi在玩乙個遊戲,他需要把1,2,3,nm填入乙個n行m列的矩陣中,使得矩陣每一行從左到右 每一列從上到下都是遞增的。2.這是楊氏矩陣的乙個性質,其實這個題目的本質就是在求1 nm這nm個數字,可以構造出多少個n m楊氏矩陣。首先對於楊氏矩陣,n個數,可以構成的楊氏矩陣的數量,在不加...