题目大意:
思路:
一个很像是离散的大模拟
对于任意一块巧克力:
我们为了答案最优,有4种方法把它框柱:
然后我们就可以看看被框柱的部分能框柱几个巧克力,并记录最优答案。
注意:框子可以改变方向!(就是这个坑了我的AK啊~~~)
代码:
#include <cstdio>
#include <iostream>
using namespace std;
int n,x1[101],y1[101],x2[101],y2[101],x,y,maxn,sum;
void WYC_said_he_will_AK_today(int X1,int Y1,int X2,int Y2) //以第一种方法和第三种方法框柱巧克力
{
sum=0;
for (int i=1;i<=n;i++)
if (x1[i]>=X1&&x2[i]<=X2&&y1[i]>=Y1&&y2[i]<=Y2) sum++;
maxn=max(maxn,sum); //记录最优答案
}
void ZYC_said_WYC_can_not_AK_today(int X1,int Y1,int X2,int Y2) //以第二种方法和第四种方法框柱巧克力
{
sum=0;
for (int i=1;i<=n;i++)
if (x1[i]>=X1&&x2[i]<=X2&&y1[i]>=Y2&&y2[i]<=Y1) sum++;
maxn=max(maxn,sum); //记录最优答案
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
scanf("%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i]);
scanf("%d%d",&x,&y);
for (int i=1;i<=n;i++)
{
swap(x,y); //转变框子的方向
if (x2[i]-x1[i]>x||y2[i]-y1[i]>y) continue;
WYC_said_he_will_AK_today(x1[i],y1[i],x1[i]+x,y1[i]+y);
WYC_said_he_will_AK_today(x2[i]-x,y2[i]-y,x2[i],y2[i]);
ZYC_said_WYC_can_not_AK_today(x1[i],y2[i],x1[i]+x,y2[i]-y);
ZYC_said_WYC_can_not_AK_today(x2[i]-x,y1[i]+y,x2[i],y1[i]);
swap(x,y);
if (x2[i]-x1[i]>x||y2[i]-y1[i]>y) continue;
WYC_said_he_will_AK_today(x1[i],y1[i],x1[i]+x,y1[i]+y);
WYC_said_he_will_AK_today(x2[i]-x,y2[i]-y,x2[i],y2[i]);
ZYC_said_WYC_can_not_AK_today(x1[i],y2[i],x1[i]+x,y2[i]-y);
ZYC_said_WYC_can_not_AK_today(x2[i]-x,y1[i]+y,x2[i],y1[i]);
}
printf("%d\n",maxn);
return 0;
}