#include<iostream>
using namespace std;
int main(void)
{
int i,n,a,b,x1[100],y1[100],x2[100],y2[100],sum=0;
cin>>n>>a>>b;
for(i=0;i<n;i++)
cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
for(i=0;i<n;i++)
if(x1[i]>=0&&y1[i]>=0&&x2[i]<=a&&y2[i]<=b)
sum=sum+(x2[i]-x1[i])*(y2[i]-y1[i]);
else
if(y1[i]>=b||y2[i]<=0||x1[i]>=a||x2[i]<=0)
sum+=0;
else
{
if(x1[i]>=0&&y1[i]>=0)
sum=sum+(a-x1[i])*(b-y1[i]);
if(x1[i]>=0&&y1[i]<=0)
sum=sum+(a-x1[i])*y2[i];
if(x1[i]<=0&&y1[i]<=0)
sum=sum+x2[i]*y2[i];
if(x1[i]<=0&&y1[i]>=0)
sum=sum+x2[i]*(b-y1[i]);
}
cout<<sum;
return 0;
}
CCF-CSP202303-1题,上面是我写的代码,样本数据没错误但是被判零分
万分感谢
#include<iostream>
using namespace std;
signed main(void)
{
int i,n,a,b,x1[103],y1[103],x2[103],y2[103],sum=0;
cin>>n>>a>>b;
for(i=0;i<n;i++)
cin>>x1[i]>>y1[i]>>x2[i]>>y2[i];
for(i=0;i<n;i++)
if(x1[i]>=0&&y1[i]>=0&&x2[i]<=a&&y2[i]<=b)
sum=sum+(x2[i]-x1[i])*(y2[i]-y1[i]);
else
if(y1[i]>=b||y2[i]<=0||x1[i]>=a||x2[i]<=0)
sum+=0;
else
{
if(x1[i]>=0&&y1[i]>=0)
sum=sum+(min(x2[i],a)-x1[i])*(min(y2[i],b)-y1[i]);
if(x1[i]>=0&&y1[i]<=0)
sum=sum+(min(x2[i],a)-x1[i])*y2[i];
if(x1[i]<=0&&y1[i]<=0)
sum=sum+x2[i]*y2[i];
if(x1[i]<=0&&y1[i]>=0)
sum=sum+x2[i]*(min(y2[i],b)-y1[i]);
}
cout<<sum;
return 0;
}
就是比如说 if(x1[i]>=0&&y1[i]>=0)这里,右下角的点是不确定的啊,不一定右下角的点就一定在ab矩形的外面,所以要加一个判断,取一个min值