一本通1118 鋪地毯


【題目描述】

為了准備一個獨特的頒獎典禮,組織者在會場的一片矩形區域(可看做是平面直角坐標系的第一象限)鋪上一些矩形地毯。一共有n張地毯,編號從1到n。現在將這些地毯按照編號從小到大的順序平行於坐標軸先后鋪設,后鋪的地毯覆蓋在前面已經鋪好的地毯之上。地毯鋪設完成后,組織者想知道覆蓋地面某個點的最上面的那張地毯的編號。注意:在矩形地毯邊界和四個頂點上的點也算被地毯覆蓋。

輸入輸出樣例1說明:如下圖,1號地毯用實線表示,2號地毯用虛線表示,3號用雙實線表示,覆蓋點(2,2)的最上面一張地毯是3號地毯。

輸入輸出樣例2說明:如下圖,1號地毯用實線表示,2號地毯用虛線表示,3號用雙實線表示,覆蓋點(4,5)的最上面沒有一張地毯。

【輸入】

第一行,一個整數n,表示總共有n張地毯。

接下來的n行中,第i+1行表示編號i的地毯的信息,包含四個正整數a,b,g,k,每兩個整數之間用一個空格隔開,分別表示鋪設地毯的左下角的坐標(a,b)以及地毯在x軸和y軸方向的長度。

第n+2行包含兩個正整數x和y,表示所求的地面的點的坐標(x,y)。

【輸出】

輸出共1行,一個整數,表示所求的地毯的編號;若此處沒有被地毯覆蓋則輸出-1。

【輸入樣例】

3
1 0 2 3
0 2 3 3
2 1 3 3
2 2

【輸出樣例】

3

【提示】

樣例輸入#2:

3
1 0 2 3
0 2 3 3
2 1 3 3
4 5

樣例輸出#2:

-1

【數據范圍】

全部數據,1n10000


1.這應該是我在博客里寫的第一個數組的題哈。

   按規矩還是講一下一開始看到題的感受。

   話說這好像是NOIP的原題,以前見過但沒做,

   作為一本通一維數組的最后一道題,

   剛看還是覺得不怎么好做的。

   但確實一點技術含量都沒有...

2.又到了分析題干的時間了。

  首先看到這個題,直接給了個直角坐標系,

   順便還給了我們所要設的所有參數,

   首先我們可以找到輸入后不變的量,也就是那個定點的坐標,

   我們把變量(就是地毯,因為有好幾塊)和這個坐標循環比較。

   比較好得關系:

   如果這個點在這塊地毯上,

   則它的橫坐標必在地毯橫向兩端點橫坐標的范圍內,

   縱坐標比在地毯縱向兩端點的范圍之內。

3.好了其他也沒什么可講的了,

   直接對着正解走一遍吧

#include<iostream>
using namespace std; 
int main() 
{
    int n,x,y;//定義地毯張數和定點坐標
    int	a[10001],b[10001],g[10001],k[10001];//定義地毯
    int i;
    cin>>n;
	for(i=1;i<=n;i++)//循環輸入n張地毯的信息
    {
        cin>>a[i]>>b[i];
        cin>>g[i]>>k[i];
    }
    cin>>x>>y;//輸入定點坐標
    for(i=n;i>=1;i--)//循環都好理解,i--的目的是從上往下對照地毯,實現輸出最上面的地毯。
    {
        if((x>=a[i]&&x<=a[i]+g[i]) && (y>=b[i]&&y<=b[i]+k[i]))//邊界條件
        {
            cout<<i<<endl;//輸出地毯編號
            return 0;
        }
    }
    cout<<-1<<endl;//該定點沒有被任何地毯覆蓋
    return 0;
}

 嗯對就是這樣。

4.喜聞樂見的總結時間又到了:

   話說這個題真的非常水,

   其實我寫着博客的時候,

   就覺得這個題其實沒什么特殊的,

   數組的題,

   特別是一維數組的題,我覺得都還好。

   關鍵是細心,

   對於邊界條件的把控,

   以及題干中一些比較特殊的要求也要注意,

   比如這個題中要求輸出最上面地毯的編號。

   細心,千萬細心!

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM