6537: candy买糖果 桶排序

发布时间 2023-07-07 13:04:56作者: CRt0729

描述

 

 

candy非常喜欢吃糖果,于是他就攒下平时妈妈发的零花钱,准备放学后去偷偷买糖。

现在candy知道自己的存钱罐里一共有n张纸币,每张纸币的面值为Vi。这几天放学后,他想要用这些钱买m种糖果,并且希望能用一种面值的纸币恰好买到所有的糖果。

 

 

输入

 

 

第一行包含两个整数,分别为纸币张数n和糖果种数m。

第二行有n个整数Vi,代表每张纸币的面值(单位:元)。

接下来m行,每行有两个实数Ai和Bi,代表单价为Ai(单位:元/千克)的糖果要买Bi千克。

纸币可以是任何整数面值,所有数据均不超过500。

 

 

输出

 

 

如果可以用一种面值的纸币恰好买到所有的糖果则输出"YES",否则输出"NO"。

 

 

样例输入

 

5 2
2 5 5 7 2
3 2
1 4

样例输出

 YES
 
坑爹的地方在于输入会带小数,且题目意思是说必须只能一种面额的金钱买完所有的糖果
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<cstring>
int a[10005];
using namespace std;
int main()
{
    float n,m,max=0,sum=0,f=0;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int num;
        cin>>num;
        if(num>max)max=num;
        a[num]+=num; //第num个面值的总价值加num 
    }
    for(int j=1;j<=m;j++)
    {
        double x,y;
        cin>>x>>y;
        sum+= x*y; //计算所有糖果的价格 
    }
    for(int i=1;i<=501;i++)
    {
        if(a[i]-sum==0) //如果第i个面额刚好可以买完所有糖果,则方案可行 
        {f = 1;break;}
    }
    if(f==1)cout<<"YES"<<endl;
    else cout<<"NO"<<endl;
     return 0;
}