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的更多相关文章

  1. Codeforces Round #510 (Div. 2)

    Codeforces Round #510 (Div. 2) https://codeforces.com/contest/1042 A 二分 #include<iostream> usi ...

  2. Codeforces Round #510 (Div. 2) D. Petya and Array(离散化+反向树状数组)

    http://codeforces.com/contest/1042/problem/D 题意 给一个数组n个元素,求有多少个连续的子序列的和<t (1<=n<=200000,abs ...

  3. Codeforces Round #510 (Div. 2) B. Vitamins

    B. Vitamins 题目链接:https://codeforces.com/contest/1042/problem/B 题意: 给出几种药,没种可能包含一种或多种(最多三种)维生素,现在问要吃到 ...

  4. Codeforces Round #510 (Div. 2) D. Petya and Array(树状数组)

    D. Petya and Array 题目链接:https://codeforces.com/contest/1042/problem/D 题意: 给出n个数,问一共有多少个区间,满足区间和小于t. ...

  5. 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 ...

  6. Codeforces Round #510 #A

    http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...

  7. Codeforces Round #510 (Div. 2)(C)

    传送门:Problem C https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 给你n个数,定义有两种操作 ① 1 i j : (i != ...

  8. Codeforces Round #510 (Div. 2)(B)

    传送门:Problem B https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 如果可以通过喝果汁将维生素A,B,C全部摄取,求最小花费,如 ...

  9. Codeforces Round #510 (Div. 2)(A)

    传送门:Problem A https://www.cnblogs.com/violet-acmer/p/9682082.html 题意: 公园里有n个沙滩,a[i]表示第i个沙滩初始人数,现有m个人 ...

随机推荐

  1. localStorage和sessionStorage使用

    localStorage.setItem("key","value");//存数据 localStorage.getItem("key"); ...

  2. django项目设置

    1 项目下的文件 用于项目设定的setting.py 用于url规则匹配的urls.py 用于创建socket对象的wsgi.py 2 urls django2.0相比1.x,在url匹配语法上有很大 ...

  3. Gym - 101810H ACM International Collegiate Programming Contest (2018)

    bryce1010模板 http://codeforces.com/gym/101810 #include <bits/stdc++.h> using namespace std; #de ...

  4. 解决windows下 Python中 matplotlib 做图中文不显示的问题

    在代码中填入以下两句即可 from pylab import mpl mpl.rcParams['font.sans-serif'] = [font_name] 如:mpl.rcParams['fon ...

  5. ZOJ Saddle Point 数学思维题

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5564   根据它的定义是行最小,列最大. 可以证明鞍点是唯一的. ...

  6. phpdesigner 配置SVN

  7. Mybatis中的复合条件查询

    1.Map中根据字段名存儲: 定义接口:List<Student> selectByCondition1(Map<String,Object> map); 映射文件: < ...

  8. Scanner-String-StringBuilder-API

    1.能够明确API的使用步骤     1)打开帮助文档     2)点击显示,找到索引,看到输入框     3)你要找谁?在输入框里输入,然后回车     4)看包:java.lang下的类不需 ...

  9. BeanUtils 工具类

    一.BeanUtils 概述     BeanUtils 是阿帕奇提供的一套专门用于将一些数据封装到java对象中的工具类;          名词:javaBean:特定格式的java类称为java ...

  10. ejb2.0用本地引用提高EJB访问效率

    用本地引用提高EJB访问效率 EJB 1.0和1.1规范只定义了一种在EJB组件中引用另一组件的方法,即通过Bean的远程接口.如果两个Bean都在同一个容器之内,则这种网络开销是不必要的.为解决这个 ...