2018 CodeM资格赛(下单)

题目描述


时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++ 262144K,其他语言 524288K
64bit IO Format: %lld


美团在吃喝玩乐等很多方面都给大家提供了便利。最近又增加了一项新业务:小象生鲜。这是新零售超市,你既可以在线下超市门店选购生鲜食品,也可以在手机App上下单,最快30分钟就配送到家。
新店开张免不了大优惠。我们要在小象生鲜超市里采购n个物品,每个物品价格为ai,有一些物品可以选择八折优惠(称为特价优惠)。
有m种满减优惠方式,满减优惠方式只有在所有物品都不选择特价优惠时才能使用,且最多只可以选择最多一款。
每种满减优惠描述为(bi,ci),即满bi减ci(当消费>=bi时优惠ci)。

求要买齐这n个物品(必须一单买齐),至少需要多少钱(保留两位小数)。

输入描述:

第一行,两个整数n,m。
接下来n行,每行一个正整数ai,以及一个0/1表示是否可以选择特价优惠(1表示可以)。
接下来m行,每行两个正整数b i,c i,描述一款满减优惠。
1 <= n,m <=10
1 <= a <= 1001 <= c < b <= 1000

输出描述:

一行一个实数,表示至少需要消耗的钱数(保留恰好两位小数)。
示例1

输入

2 1
6 1
10 1
12 2

输出

12.80
示例2

输入

2 2
6 1
10 1
5 1
16 6

输出

10.00

代码参考:

#include<iostream>
#include<cstdio>
using namespace std;

int result=0;
int sum = 0;
float der=0.0;
float price1=0,price2=0;

//特价优惠方式
void price(int a, int b){
    int j;
    if(b == 1){
        price1 += a*0.8;
    }else{
        price1 += a;
    }
}
//满减方式
void cut(int c, int d){
    if(result >= c){
        price2 = result - d;
        if(price2 < price1 && price2 < der){
            der = price2;
        }else if(price2 > der){
            der = der;
        }else if(price2 < price1 && price2 > der){
            der = der;
        }
    }else if(result < c){
        der = price1;
    }

}

int main(){
    int n,m;    //n表示物品数量,m表示优惠方式的数量
    int i;
    int stuff[20][20]={0};
    int cutoff[20][20]={0};
    int money,discount;
    int reach,down;


    //freopen("input.txt","r",stdin);
    cin>>n>>m;
    for(i=0;i<n;i++){
        cin>>money>>discount;
        stuff[i][0] = money;
        stuff[i][1] = discount;
    }
    for(i=0;i<m;i++){
        cin>>reach>>down;
        cutoff[i][0] = reach;
        cutoff[i][1] = down;
    }
    for(i=0;i<n;i++){
        sum = sum + stuff[i][0];
    }
    result = sum;
    for(i=0;i<n;i++){
        price(stuff[i][0],stuff[i][1]);
    }
    der = price1;
    for(i=0;i<m;i++){
        cut(cutoff[i][0],cutoff[i][1]);
    }
    printf("%.2f",der);
    return 0;

}

成功AC:(代码有不好的地方,请多多指教!)


猜你喜欢

转载自blog.csdn.net/weixin_42414405/article/details/80619425