zoukankan      html  css  js  c++  java
  • JZOJ 4.1 C组【GDOI2005】积木分发

    Description

      歌手The Pancakes到幼儿园跟小朋友玩,她到达的时候小朋友已经争着积木玩了。小朋友都想要更多的积木砌一个自己喜欢的图形,砌玩就可以和The Pancakes合照。同时,The Pancakes手上还有一些积木,她可以把手里的这些积木全部给一个小朋友,然后等该小朋友砌完后就可以收回所发的积木和该小朋友原先手里的积木。但她不知道能否让所有的小朋友都和她合照,聪明的你可以帮助她吗?

    Input

      输入包含多个数据。
      每个数据的第一行是两个正整数n和s,1<=n<=10000,1<=s<=10000,表示一共有n位小朋友,The Pancakes手上有s块积木。以下有n行,每行有两个正整数,a和b,1<=a,b<=10^9,表示第i个小朋友手上有a块积木,还需要b块积木才能够砌完。
      输入两个0时表示结束。

    Output

      如果可以让所有小朋友都和Pancake合照,就输出YES;否则,输出NO。

    Sample Input

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

    Sample Output

    YES
    NO


    题解:

    先将需要的积木从小到大排一遍.。
    然后判断:
    ① 如果当前的需要的积木大于到目前为止所可以得到的积木,则退出;
    ② 如果当前的需要的积木小于等于目前为止可以得到的积木,将目前为止得得到的积木+小朋友拥有的积木(因为小朋友砌完,就可以获得小朋友的积木)


    代码如下:

    #include <iostream>
    #include <cstdio>
    using namespace std;
    int i,n;
    long long s,a[10001][2];
    void qs(int l,int h)
    {
        int i=l,j=h;
        long long mid=a[(l+h)/2][0],mid2=a[(l+h)/2][1],t;
        do
        {
            while (a[i][1]<mid2||a[i][1]==mid2&&a[i][0]>mid) i++;
            while (a[j][1]>mid2||a[j][1]==mid2&&a[j][0]<mid) j--;
            if (i<=j)
            {
                t=a[i][0];a[i][0]=a[j][0];a[j][0]=t;
                t=a[i][1];a[i][1]=a[j][1];a[j][1]=t;
                i++;
                j--;
            }
        }
        while (i<=j);
        if (i<h) qs(i,h);
        if (l<j) qs(l,j);
    }
    int main()
    {
        while (1)
        {
            scanf("%d%lld",&n,&s);
            if (n==0&&s==0) break;
            for (i=1;i<=n;i++)
            scanf("%lld%lld",&a[i][0],&a[i][1]);
            qs(1,n);
            for (i=1;i<=n;i++)
             {
                if (a[i][1]<=s)
                  s+=a[i][0];
                 else
                 {
                    printf("NO
    ");
                    break;
                 }
                if (i==n) printf("YES
    ");
             }
        }
        return 0;
    }
  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412345.html
Copyright © 2011-2022 走看看