2107.オレンジの影付きの領域

タイトル説明

オレンジは毎晩夢を見ますが、夢を見たくないのは、オレンジが夢を見るたびに長方形の影が生成され、すべての夢が1つを生成するからです。奇妙なことに、オレンジには毎晩2つの夢しかなく、オレンジは毎晩であることを知りたがっています。の影の大きさはどれくらいですか、オレンジが2つの長方形の面積の合計を計算するのを手伝ってくれませんか?(重複部分は1回のみカウントされます)

入る

各行に4つの整数x、y、x1、y1を含む2行を入力します。(x、y)は長方形の左下隅、(x1、y1)は長方形の右上隅です(0≤x、y、x1、y1≤1000)。

出力

2つの長方形の面積の合計を表す整数を出力します。(重複部分は1回のみカウントされます)

サンプル入力

0 1 2 3
1 0 3 2

サンプル出力

7

コードの内容

#include <iostream>
#include<cmath>
using namespace std;

int max2(int a,int b)
{
    
    
    if(a>b)
        return a;
    else
        return b;
}

int min2(int a,int b)
{
    
    
    if(a>b)
        return b;
    return a;
}

int main()
{
    
    
    int i,x[4],y[4],s1,s2,s3,area;
    int x1,x2,y1,y2;
    for(i=0;i<4;i++)
        cin>>x[i]>>y[i];
    s1=(x[1]-x[0])*(y[1]-y[0]);
    s2=(x[3]-x[2])*(y[3]-y[2]);

    if((x[2]>=x[1])||(x[0]>=x[3])||(y[0]>=y[3])||(y[1]<=y[2]))
        area=s1+s2;
    else
    {
    
    
        x1=max2(min2(x[0],x[1]),min2(x[2],x[3]));
        x2=min2(max2(x[0],x[1]),max2(x[2],x[3]));
        y1=max2(min2(y[0],y[1]),min2(y[2],y[3]));
        y2=min2(max2(y[0],y[1]),max2(y[2],y[3]));
        s3=abs((x1-x2)*(y1-y2));
        area=s1+s2-s3;
    }
    cout<<area<<endl;
    return 0;
}

参照

おすすめ

転載: blog.csdn.net/weixin_51800059/article/details/111088695