本文主要是介绍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.:不要问我函数名那么搞怪!
这篇关于SSL-ZYC 2405 巧克力的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!