p3631 apio2011方格染色
異或性質+帶權並查集維護
主要是異或性質, 題目要求每個\(2\ast2\)的矩形內異或值為1
在使用\(2\ast2\)的矩形異或的時候,考慮對於乙個矩形,除了最外面一圈,內部的格仔都會被異或四次,除了內部和四個頂點的格仔會被異或兩次,所以可以不考慮(同乙個值異或兩次等於不異或),只用考慮四個頂點,那麼考慮矩形 \((a,b)(a,c)(b,d)(c,d)\)
我們可以得到
在矩形長寬均為偶數的情況 \(1 = val_ \bigoplus val_ \bigoplus val_ \bigoplus val_\)
在矩形長寬不均為偶數的情況 \(0 = val_ \bigoplus val_ \bigoplus val_ \bigoplus val_\)
更進一步,對於已知兩個頂點的矩形,我們可以知道剩下兩個點是否相同。
那麼我們令 \(a = 1, b = 1\) 來做此題。
然後列舉 \(val_\) 的值,就行了。
取0和取1是相反的狀態,直接給k個確定點取反就行了。
注意:
if ((!(x[i] & 1)) && (!(y[i] & 1)))
以上**是為了統一評判標準。
#include #include #include using namespace std;
typedef long long ll;
const ll maxn = 1e6+10;
const ll mod = 1e9;
ll n, m, k, x[maxn], y[maxn], k[maxn], g[maxn], fa[maxn];
ll calc(ll);
ll find_(ll);
ll kuaisu(ll, ll);
int main()
if (x[i] == 1 && y[i] == 1)
}if (-1 != flag) else
return 0;
}ll calc(ll opt)
}for (ll i = 1; i <= n + m; i++) fa[i] = i, g[i] = 0;
fa[n+1] = 1;
for (ll i = 1; i <= k; i++) else if (tp) }}
ll tot = 0;
for (ll i = 1; i <= n + m; i++)
return kuaisu(2, tot-1) % mod;
}ll kuaisu(ll n, ll tim)
tim >>= 1;
n = n * n % mod;
}return ret;
}ll find_(ll x)
return q;
}
BZOJ2303 Apio2011 方格染色
sam和他的妹妹sara有乙個包含n m個方格的 她們想要將其的每個方格都染成紅色或藍色。出於個人喜好,他們想要 中每個2 2的方形區 域都包含奇數個 1 個或 3 個 紅色方格。例如,右 圖是乙個合法的 染色方案 在列印稿中,深色代 表藍色,淺色代表紅色 可是昨天晚上,有人已經給 中的一些方格染上...
bzoj 2303 Apio2011 方格染色
傳送門 sam和他的妹妹sara有乙個包含n m個方格的 她們想要將其的每個方格都染成紅色或藍色。出於個人喜好,他們想要 中每個2 2的方形區域都包含奇數個 1 個或 3 個 紅色方格。例如,右圖是乙個合法的 染色方案 在列印稿中,深色代表藍色,淺色代表紅色 可是昨天晚上,有人已經給 中的一些方格染...
bzoj 2303 Apio2011 方格染色
很神奇的思路,膜一發大佬 設s i,j a i j a i 1 j a i j 1 a i 1 j 1 那麼將s 1,1 s 1,2 s 1,j s 2,1 s 2,j s i,j 展開,對於i相同的一行 如s 1,1 s 1,2 s 1,j 我們可以先然看出其結果為開頭的a i 1 a i j 同...