201809-2 買菜

菜雞彳亍zhe發表於2020-11-12

在這裡插入圖片描述

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin>>n;
    int a[n][2];
    int b[n][2];
    int Count=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i][0];
        cin>>a[i][1];
    }
    for(int i=0;i<n;i++)
    {
         cin>>b[i][0];
         cin>>b[i][1];
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
           //情況一
            if((b[j][0]<a[i][0])&&(b[j][1]<=a[i][1])&&(b[j][1]>a[i][0]))
            {
                Count+=b[j][1]-a[i][0];
            }
          //情況二
            else if((b[j][0]<a[i][0])&&(b[j][1]>=a[i][1]))
            {
                Count+=a[i][1]-a[i][0];
            }
           //情況三
            else if((b[j][0]>=a[i][0])&&(b[j][1]<=a[i][1]))
            {
                Count+=b[j][1]-b[j][0];
            }
            //情況四
            else if((b[j][0]>=a[i][0])&&(b[j][1]>a[i][1])&&(b[j][0]<a[i][1]))
            {
                Count+=a[i][1]-b[j][0];
            }
        }
    }
   cout<<Count<<endl;

    return 0;
}

#把幾種情況 都考慮到就完事 下面附上一張圖
在這裡插入圖片描述

情況一:必須把b的右端限制在a的左右兩端中間

中心思想:就是把儲存時間的陣列想象成兩個有端點的線,數形結合比較直觀

相關文章