小信吃甜筒的题解

目录

原题描述:

时间:1s 空间:256M

题目描述:

输入格式:

输出格式:

样例1输入:

样例1输出:

主要思路:

ACCODE:


时间限制: 1000ms

空间限制: 262144kB

原题描述:

时间:1s 空间:256M

题目描述:

小信想吃到n个巧克力味的甜筒和m个草莓味的甜筒,不能多吃。

冰柜里,有x个巧克力味甜筒,饱食值分别为a_1,a_2,...,a_x,有y个草莓味甜筒,饱食值分别为b_1,b_2,...,b_y,有z个原味甜筒,饱食值分别为c_1,c_2,...,c_z。小信可以在原味甜筒上加调味料使其变成巧克力味或草莓味。

他想知道在不多吃的情况下能获得的最大饱食值。

输入格式:

第一行,包含五个正整数 n,m,x,y,z,表示小信想吃的甜筒数和冰柜内的不同口味甜筒数。

第二行,包含x个整数a_1,a_2,...,a_x,表示巧克力味甜筒饱食值。

第三行,包含y个整数b_1,b_2,...,b_y​,表示草莓味甜筒饱食值。

第四行,包含z个整数c_1,c_2,...,c_z,表示原味甜筒饱食值。

输出格式:

输出一个整数,小信能获得的最大饱食值。

样例1输入:

1 2 2 2 1
2 5
3 1
4

样例1输出:

12

主要思路:

这题是个贪心题,设吃了x个巧克力冰淇凌,y个草莓味冰淇凌,z个原味冰淇凌。

则x+y+z要<=n+m

还有个要注意的点,就是只有前n大,前m大的冰淇凌才可以进入评定。

最后就拍个序了。

ACCODE:
 

#include<bits/stdc++.h>
#define int long long
using namespace std;
vector<int> v;
int a[100010],b[100010],c[100010];
bool cmp(int x,int y)
{
	return x>y;
}
signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int n,m,x,y,z;
	cin>>n>>m>>x>>y>>z;
	for(int i=1;i<=x;i++)
	{
		cin>>a[i];
//		v.push_back(tmp);
	}
	for(int i=1;i<=y;i++)
	{
		cin>>b[i];
	}
	for(int i=1;i<=z;i++)
	{
		cin>>c[i];
		v.push_back(c[i]);
	}
	sort(a+1,a+1+x,cmp);
	for(int i=1;i<=n;i++)//进入评选
	{
		v.push_back(a[i]);
	}
	sort(b+1,b+1+y,cmp);
	for(int i=1;i<=m;i++)//进入评选
	{
		v.push_back(b[i]);
	}
	sort(v.begin(),v.end(),cmp);
	int ans=0;
	for(int i=0;i<n+m;i++)//遍历一遍
	{
		ans+=v[i];
	}
	cout<<ans;
	return 0;
}

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的模拟点餐系统的代码实现: ```c++ #include <iostream> #include <string> #include <map> #include <vector> using namespace std; // 餐品信息 struct MenuItem { string name; // 餐品名称 double price; // 餐品价格 MenuItem(string n = "", double p = 0) : name(n), price(p) {} }; // 组合优惠信息 struct PromotionItem { vector<string> items; // 组合餐品名称 double discount; // 优惠价格 PromotionItem(vector<string> v = {}, double d = 0) : items(v), discount(d) {} }; // 菜单信息 map<char, MenuItem> menu = { {'A', MenuItem("汉堡", 18.0)}, {'B', MenuItem("薯条", 8.0)}, {'C', MenuItem("可乐", 6.0)}, {'D', MenuItem("甜筒", 10.0)} }; // 组合优惠信息 vector<PromotionItem> promotions = { PromotionItem({"A", "B", "C"}, 5.0), PromotionItem({"B", "C", "D"}, 6.0) }; // 根据输入的餐品名称计算总价 double calculatePrice(vector<string> items) { double total = 0; map<string, int> cnt; // 统计每个餐品出现的次数 for (string item : items) { cnt[item]++; } for (auto p : cnt) { string name = p.first; int num = p.second; double price = menu[name[0]].price; total += price * num; // 处理组合优惠 for (PromotionItem promo : promotions) { bool flag = true; for (string item : promo.items) { if (cnt[item] < 1) { flag = false; break; } } if (flag) { total -= promo.discount; break; } } } return total; } int main() { cout << "**********欢迎来到点餐系统**********" << endl; cout << "餐品列表:" << endl; for (auto p : menu) { cout << p.first << "." << p.second.name << " 价格:" << p.second.price << endl; } cout << "请输入您要点的餐品(每个餐品对应一个字母),多个餐品之间用空格隔开,输入0结束:" << endl; vector<string> items; // 存储用户点的餐品 while (true) { char c; cin >> c; if (c == '0') { break; } if (menu.count(toupper(c)) == 0) { // 判断输入是否合法 cout << "输入有误,请重新输入" << endl; continue; } items.push_back(menu[toupper(c)].name); } // 计算总价并输出结果 double total = calculatePrice(items); cout << "您点的餐品有:"; map<string, int> cnt; for (string item : items) { cnt[item]++; } for (auto p : cnt) { cout << p.first << "*" << p.second << " "; } cout << endl; cout << "总价为:" << total << " 元" << endl; return 0; } ``` 运行结果: ``` **********欢迎来到点餐系统********** 餐品列表: A.汉堡 价格:18 B.薯条 价格:8 C.可乐 价格:6 D.甜筒 价格:10 请输入您要点的餐品(每个餐品对应一个字母),多个餐品之间用空格隔开,输入0结束: a b c d b c 您点的餐品有:汉堡*1 薯条*2 可乐*2 甜筒*1 总价为:46 元 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值