The sol to First Town of This Journey/Grid Covering

The sol to First Town of This Journey/Grid Covering

https://www.luogu.com.cn/problem/P11168

思路--构造法(即QC同学口中的特判题)

参考自 https://www.luogu.com.cn/article/92d4s1hi
要求选的黑点最少,相当于要求选的白点最多。
考虑一个白点选了之后对问题有什么影响,显然与他挨着的行与列就不能选,否则连起来是不会经过黑点的。
然后就很容易想出构造方案,选择所有 \((i,j)(i \equiv 1 \pmod 2,j \equiv 1 \pmod 2)\),画个图可以发现这显然是满足要求的。
接下来考虑指定颜色:

  • 指定一个点为黑点,如果它不在我们的初始方案上就不用管,如果在,考虑能否将初始方案向右或向下平移,不能答案要加 \(1\)
  • 指定一个点为白点,如果它在初始方案上就不用管,否则将初始方案略微平移过来即可。
    还有个重点:要开 unsinged long long ,不开 \(ULL\) 见祖宗……
    作者本人编译时有个问题,那就是变量名 yn 在本地不报错,交上去却 \(CE\) ,改成其他的诸如 Yn 就好了。

code

#include<bits/stdc++.h>
using namespace std;
#define ull unsigned long long
ull n,m,a,b,x,ans,Yn,ym;
int main(){
	cin>>n>>m>>a>>b>>x;
	Yn=n;ym=m;
	if(x==0&&a%2==0) n--;
	if(x==0&&b%2==0) m--;
	if(x==1&&(a%2==1&&b%2==1&&n%2==1&&m%2==1))ans--;
	ans+=((n+1)/2)*((m+1)/2);
	cout<<Yn*ym-ans<<endl;
	return 0;
}
posted @ 2024-11-22 13:22  Qian·JXのjoker  阅读(2)  评论(0编辑  收藏  举报