Codeforces Round #510 #B
http://codeforces.com/contest/1042/problem/B
题意:
给出n种饮料,每种饮料还有一种或多种维生素(A或B或C),某人想集齐三种维生素,问最少需要花费多少?
每一行先输入每种饮料的价格,再输入每种饮料的包含的维生素种类。
将ABC分别用一个数字表示,开始时准备:1表示A,2表示B,3表示C。
包含维生素A的饮料=1,包含维生素B的=2,C=3,AB=A+B=3,到了这就发现这样不对,有重复了。
所以我们最好用三个质数表示ABC。
这里A=2,B=5,C=11。
AB=A*B=10,AC=A*C=22,BC=B*C=55;
ABC=110.
当然这里用加表示也可以,看心情啦。
那么我们需要在输入时,记录每种饮料的还费最小值,并且判断三种维生素是否都出现过。
那么我们的答案就是$$min \{ AB+C,AC+B,BC+A,A+B+C,AC+BC,AB+BC,AB+AC }$$
当然判断答案时你需要判断这种饮料是否出现过。
!!!越离奇的方法越不容易被hack。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int p[],ans,cnt;
int n,val[],cost,a[]; //A=2,B=5,C=11;
char s[];
bool vis[],hack[]; //hack数组判断某种饮料是否出现过。
int main()
{
ans=;
a['A']=;a['B']=;a['C']=;
memset(p,0x7f,sizeof(p));
scanf("%d",&n);
for(int i=; i<=n; i++)
{
scanf("%d",&cost);
scanf("%s",s);
int l=strlen(s),tot=;
for(int j=; j<l; j++)
{
tot*=a[s[j]];
if(!vis[s[j]])vis[s[j]]=,cnt++;
}
p[tot]=min(p[tot],cost);
hack[tot]=;
}
if(cnt<)printf("-1");
else
{ if(hack[]&&hack[]&&hack[])ans=min(ans,p[]+p[]+p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
if(hack[])ans=min(ans,p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
if(hack[]&&hack[])ans=min(ans,p[]+p[]);
printf("%d",ans);
} }
Codeforces Round #510 #B的更多相关文章
- Codeforces Round #510 (Div. 2)
Codeforces Round #510 (Div. 2) https://codeforces.com/contest/1042 A 二分 #include<iostream> usi ...
- Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)
http://codeforces.com/contest/1042/problem/D 题意 给一个数组n个元素,求有多少个连续的子序列的和<t (1<=n<=200000,abs ...
- Codeforces Round #510 (Div. 2) B. Vitamins
B. Vitamins 题目链接:https://codeforces.com/contest/1042/problem/B 题意: 给出几种药,没种可能包含一种或多种(最多三种)维生素,现在问要吃到 ...
- Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)
D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...
- Codeforces Round #510 #C Array Product
http://codeforces.com/contest/1042/problem/C 给你一个有n个元素序列,有两个操作:1,选取a[i]和a[j],删除a[i],将$a[i]*a[j]$赋值给a ...
- Codeforces Round #510 #A
http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...
- Codeforces Round #510 (Div. 2)(C)
传送门:Problem C https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 给你n个数,定义有两种操作 ① 1 i j : (i != ...
- Codeforces Round #510 (Div. 2)(B)
传送门:Problem B https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 如果可以通过喝果汁将维生素A,B,C全部摄取,求最小花费,如 ...
- Codeforces Round #510 (Div. 2)(A)
传送门:Problem A https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 公园里有n个沙滩,a[i]表示第i个沙滩初始人数,现有m个人 ...
随机推荐
- Integrative Analysis of MicroRNAome, Transcriptome, and Proteome during the Limb Regeneration of Cynops orientalis (文献分享一组-翁海玉)
文献名:Integrative Analysis of MicroRNAome, Transcriptome, and Proteome during the Limb Regeneration of ...
- 【OpenJ_Bailian - 4005】拼点游戏(贪心)
拼点游戏 Descriptions: C和S两位同学一起玩拼点游戏.有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数.C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两 ...
- C++中各种简写及全称的库
ATL(Active TEmplate Library)活动模板库 RPC(Remote Procedure Call Protocol)远程过程调用协议 DCE(Distributed Comput ...
- endless(2018.10.25)
这题就是个线段树合并板子. #include<cstdio> #include<algorithm> #include<cstring> using namespa ...
- bzoj1726:[Usaco2006 Nov]Roadblocks 次短路
Description 贝茜把家搬到了一个小农场,但她常常回到FJ的农场去拜访她的朋友.贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样, ...
- JAVA团队开发手册 - 3. 开发流程
开发流程 对于一个项目,最大的问题就是如何拆解为任务,分配到合适的人手里,并在有限的时间内完成它. 就像做建筑工程一样,其实做IT也是可以量化的,可能有的人砌砖砌得慢一些,有的人快一些. 但是我们把整 ...
- 前端开发 - Emmet使用手册
Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的一个工具: 基本上,大多数的文本编辑器都会允许你存储和重用一些代码块,我们称之为"片段".虽然片段能很 ...
- UML建模 | Rose | 没有跳出可选择新建RUP的对话框解决方法
- UILabel和UIbutton(富文本)封装方法
/** 方法说明:设置label的富文本属性 参数说明:contentStr富文本内容 textColor字体颜色 rangeSet设置字体颜色及大小的位置 */ - (UILabel *)backf ...
- HDU4035(概率期望、树形、数学)
和ZOJ3329有些像,都是用期望列出来式子以后,为了解式子,设A[i],B[i],此题又多了C[i],然后用递推(此题是树形dp)去求得ABC,最后结果只跟ABC有关,跟列写的期望数组根本无关. 虽 ...