[ACM]積木分發

來源:互聯網
上載者:User

Time Limit: 1000MS Memory Limit: 65535KB
Total Submissions: 539 Accepted: 52

Description:

歌手Pancakes到幼兒園跟小朋友玩,她到達的時候小朋友們正在爭積木,小朋友都想要更多的積木砌一個自己喜歡的圖形,砌完就可以和Pancakes合照。
同時,Pancakes手上還有一些積木,她可以把手上的這些積木全部給一個小朋友,然後等該小朋友砌完後就可以收回所發的積木和該小朋友原先手上的積木。
但她不知道能否讓所有的小朋友都和她合照,聰明的你可以協助她嗎?

Input:

輸入包括多個資料。
每個資料的第1行是兩個正整數n和s,n的範圍是[1,10000], s的範圍是[1,10000],表示一共有n位小朋友,Pancakes手上有s塊積木。以下有n行,每行有2個正整數,a和b,a和b的範圍是[1,10^9],表示第i個小朋友手上有a塊積木,還需要b塊積木才能夠砌完。
輸入n=0時表示結束。

Output:

如果可以讓所有小朋友都合照,就輸出"YES",否則,輸出"NO"。

Sample Input:

2 2
1 4
2 1
2 2
1 4
1 1
0 0

Sample Output:

YES
NO

Hint:

 

Source:

GDCPC

 

解答:

此題相對來說比較簡單,只要找大一個小孩需要積木數少於歌手手裡的積木數就可以給他,然後就可以收回給的積木數,並獲得小孩手裡的積木。此題並不需要去貪心,否則可能造成逾時。代碼如下:

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

struct child
{
    int own;
    int less;
};

int child_cmp(const child& a, const child& b)
{
    return a.less < b.less;
}

int main()
{
    int n, s, i, can;
    vector<child>::iterator it;
    while(1)
    {
        scanf("%d%d", &n, &s);
        if(n == 0)
            break;

        vector<child> cls;
        for(i = 0; i < n; i ++)
        {
            child x;
            scanf("%d%d", &x.own, &x.less);
            cls.push_back(x);
        }
        can = true;
        make_heap(cls.begin(), cls.end(), child_cmp);
        sort_heap(cls.begin(), cls.end(), child_cmp);
        for(it = cls.begin(); it != cls.end(); it ++)
        {
            if(it->less <= s)
                s += it->own;
            else
            {
                can = false;
                break;
            }
        }
        if(can)
            printf("YES
");
        else
            printf("NO
");
    }
    return 0;
}

 

代碼中用到了結構體,可能影響速度,可以改成兩個數組來提高速度。排序演算法用的也是系統的堆排序。

相關關鍵詞:
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.