SSL-ZYC 2405 巧克力

题目大意:
这里写图片描述


思路:

一个很像是离散的大模拟

对于任意一块巧克力:

我们为了答案最优,有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;
}

P.S.:不要问我函数名那么搞怪!

猜你喜欢

转载自blog.csdn.net/ssl_zyc/article/details/80029292
今日推荐