link:方格操作
首先想到的是暴力模擬 經過畫圖不斷尋找不可解得情況 可以發現 如果可解 一定在兩步之內。
證明我也不會經過不斷畫圖 可以發現是這個樣子的 不行就暴力打表.
那麼模擬兩遍 看是否都變成0即可。
考慮 如何模擬這個過程 容易想到 乙個格仔之後的狀態= 當前狀態 ^ 行1的奇偶性 ^ 列1的奇偶性 ^ 當前狀態.
那麼得到 乙個格仔的狀態=行的奇偶^列的奇偶。
那麼每次模擬我們只需要知道每一行的1的個數 和 每一列的1的個數即可。
容易發現預處理之後 模擬的過程也可以不斷維護這兩個東西.
預處理 容易想到掃瞄線。
const int maxn=200010;
int n,m,q,cnt1;
struct wyt[maxn],g[maxn];
inline int cmp(wy a,wy b)
inline void pushdown(int p)
inline void change(int p,int l,int r)
int mid=(l(p)+r(p))>>1;
if(tag(p))pushdown(p);
if(l<=mid)change(zz,l,r);
if(r>mid)change(yy,l,r);
cnt(p)=cnt(zz)+cnt(yy);
}int main()
; g[cnt1]=(wy);
t[++cnt1]=(wy);
g[cnt1]=(wy);
} sort(t+1,t+1+cnt1,cmp);
sort(g+1,g+1+cnt1,cmp);
int flag=1;
build(1,1,m);
rep(1,n,i)//對行進行
build(1,1,n);
flag=1;
rep(1,m,i)
ll ans=0;
for(int t=1;t<=2;++t)
rep(1,n,i)if(h[i])return puts("-1"),0;
putl(ans);
return 0;
}
省選模擬賽 project
最小割問題。建如下邊 s,i,ai 代表選用a語言編寫第i個專案 i,t,bi 代表選用a語言編寫第i個專案 其後注意要反向連邊 i,j,d 代表選用b語言編寫第i個專案,選用a語言編寫第j個專案 j,i,c 代表選用a語言編寫第i個專案,選用b語言編寫第j個專案 litc學長出的題,引文最小割題目...
mirror 省選模擬賽
標籤 狀壓dp 結論 當最優情況下,每行每列鏡子的個數都為偶數 題目可以轉化為擺放鏡子,使得格仔中產生的光環最長 所以不需要考慮鏡子到底放什麼方向 於是我們直接狀壓一列鏡子當前的奇偶性進行轉移 時間複雜度o 4n n m2 o 4 n n m2 include include include inc...
Sequence 省選模擬賽
標籤 貪心 給定乙個整數數列 a,定義f a max1 inaj aif a max1 i naj ai 保證 f a 0。你需要求出至少需要修改 a 的多少個位置才能使 f a 變小。注意,你修改之後的數也必須是整數。2 n 106 ai 109 2 n 106 ai 109 簽到題gg,自己真的...