P9583 涂色 题解
P9583 涂色 题解
解法
题中说求最终有多少个方格涂着颜色,那我们可以求有多少个方格没有颜色,用方格的总数减去没有颜色的方格数即为所求。
考虑本题涂色规律,涂上
现在分别统计每个行、每个列的涂色次数,然后对行、列分别开两个桶,维护每行、每列的涂色次数对
然后枚举桶里的元素。设有
求解公式即为
代码
#include<bits/stdc++.h>
using namespace std;
namespace fast_IO
{
/*
快读快写
*/
};
using namespace fast_IO;
int n,m,q,k,hang[200010],lie[200010],rubh[500010],rubl[500010];
inline void delh(int x)
{
if(x==k-1) rubh[x]--,rubh[0]++;
else rubh[x]--,rubh[x+1]++;
}
inline void dell(int x)
{
if(x==k-1) rubl[x]--,rubl[0]++;
else rubl[x]--,rubl[x+1]++;
}
long long ans;
int main()
{
read(n),read(m),read(q),read(k),rubh[0]=n,rubl[0]=m;
for(int i=1,op,x;i<=q;i++)
{
read(op),read(x);
if(op==1) hang[x]++,delh((hang[x]-1)%k);
else lie[x]++,dell((lie[x]-1)%k);
}
ans+=1ll*rubh[0]*rubl[0];
for(int i=1;i<k;i++) ans+=1ll*rubh[i]*rubl[k-i];
cout<<1ll*n*m-ans;
return 0;
}