搶氣球_題解


  • 描述

小A教室的牆上掛滿了氣球,五顏六色,小朋友們非常喜歡。

剛一下課,小朋友們就打算去搶這些氣球。每個氣球在牆上都有一定的高度,

只有當小朋友跳起來時,手能夠到的高度大於等於氣球的高度,小朋友才能摘到

這個氣球。為了公平起見,老師讓跳的低的小朋友先摘,跳的高的小朋友后摘。

小朋友都很貪心,每個小朋友在摘氣球的時候都會把自己能摘的氣球都摘掉。

很巧的是,小朋友們跳起來手能夠着的高度都不一樣,這樣就不會有跳起來

后高度相同的小朋友之間發生爭執了。

  • 輸入

第一行輸入兩個空格分隔的整數n,m,其中n表示小朋友的數量,m表示牆上

氣球的數量。

第二行輸入n個正整數(每兩個整數之間用空格隔開),第i個數為 ai,表

示第i個小朋友跳起來手能夠着的高度為ai。

第三行輸入m個正整數(每兩個整數之間用空格隔開),第i個數為 hi,表

示第i個氣球的高度為hi。

  • 輸出

輸出一共n行,每行一個整數。

第i行表示第i個小朋友摘到的氣球數量。

 

  • 樣例輸入1

5 6
3 7 9 6 4
1 2 3 4 5 6

  • 樣例輸出1

3

0

0

2

1

  • 樣例輸入2
    10 10
    1 2 3 4 5 6 7 8 9 10
    3 1 4 6 7 8 9 9 4 12
  • 樣例輸出2
    1
    0
    1
    2
    0
    1
    1
    1
    2
    0

【題目分析】

首先把跳起高度和氣球高度都從小到大排序,然后用一個pos 來表示已經選到的氣球的位置。枚舉每個身高,如果滿足條件,pos 一直加,直到不滿足條件。

這樣人和氣球都只會掃描一遍。

標程如下

#include<bits/stdc++.h>
using namespace std;
template <typename T> inline void read(T &x)
{
    x=0;int f=1;char c=getchar();
    for(;c>'9'||c<'0';c=getchar()) if(c=='-') f=-1;
    for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48);
    x*=f;
}
template <typename T> inline void print(T x)
{
    if(x<0) putchar('-'),x=-x;
    if(x>9) print(x/10);
    putchar(x%10+48);
}
long long dis[1010101];
struct ss{
    int ID;
    long long A;
};
ss s1[1010101];
long long h[1010101],n,m,tot;
inline bool cmp(ss x,ss y)
{
    return x.A<y.A;
}
int main() 
{
//    freopen("balloon.in","r",stdin);
//    freopen("balloon.out","w",stdout);
    read(n),read(m);
    for(register int i=1;i<=n;++i)
        read(s1[i].A),s1[i].ID=i;
    for(register int i=1;i<=m;++i)
        read(h[i]);
    stable_sort(h+1,h+1+m);
    stable_sort(s1+1,s1+1+n,cmp);
    int pos=0;
    for(register int i=1;i<=n;++i)
    {
        int sum=0;
        int W=s1[i].A;
        int ID=s1[i].ID;
        for(register int j=pos+1;j<=m;++j)
        {
            if(h[j]>W)
                break;
            else
                pos++,sum++;
        }
            
        dis[ID]=sum;
    }
    for(register int i=1;i<=n;++i)
        print(dis[i]),putchar('\n');
    return 0;
}

 


免責聲明!

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



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