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个人 ...
随机推荐
- 在mpvue框架中使用Vant WeappUI组件库的注意事项
1如何引入组件库 有两种方法 1 npm下载 2 下载代码,下面介绍第二种方法. 在gitHub上, 链接如下 https://github.com/youzan/vant-weapp 首先在自己项目 ...
- 17..userinfo.txt 文件中存放以下结构:
alex:alex3714 wusir:123456 meet:meet123 1.让用户选择: 1.注册 2.登录 2.用户选择注册就将账号和密码添加到userinfo.txt中,如果用户名存在就提 ...
- shell学习(5)- sort
Linux sort命令用于将文本文件内容加以排序. sort可针对文本文件的内容,以行为单位来排序. 参数如下: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排 ...
- 自动化脚本- 安装更换Python3.5
本脚本所有信息: 1:判断是不是root用户,是则继续不是则退出脚本输出信息2:定义自己的版本3:根据用户输入的版本号,来下载对应的版本包4:使用系统命令wget来下载,注意wet后面有一个空格5:o ...
- Java | 基础归纳 | 随机数应用
Java中一般有两种随机数,一个是Math中random()方法,一个是Random类. Math.random();//返回0~1的中随机数值 Random random = new Random( ...
- iOS开发:创建推送开发证书和生产证书,以及往极光推送官网上传证书的步骤方法
在极光官网上面上传应用的极光推送证书的实质其实就是上传导出的p12文件,在极光推送应用管理里面,需要上传两个p12文件,一个是生产证书,一个是开发证书 ,缺一不可,具体如下所示: 在开发者账号里面创建 ...
- __slots__,__doc__,__module__,__class__.__call__
__slots__ 1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性)2.引子:使用点来访问属性本质就是在访问类或 ...
- php—cURL库基本用法总结
作用 用来连接客户端和服务器端,实从互联网上获取资源 常用接口 curl_init(): 初始化curl curl_close: 结束curl,释放资源 curl_setopt: 设置curl的属性 ...
- B.出题人的女装
链接:https://ac.nowcoder.com/acm/contest/358/B 题意: 出题人早上起床就打算穿衣服,他有两箱衣服,因为懒,他在这两天只打算打开一个箱子. 两个箱子中一个有n件 ...
- 说说JVM原理?内存泄漏与溢出的区别?何时产生内存泄漏?
1.JVM原理 JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的Java程序会首先被编译为.class的类文件,这种类文件可以 ...