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. 密码破解工具John the Ripper使用说明

    John the Ripper John 包描述 John the Ripper 既功能丰富又运行快速. 它在一个程序中结合了几种破解模式,并且可以根据您的特定需求进行全面地配置(你甚至可以使用支持C ...

  2. CF1110F Nearest Leaf

    传送门 这是我第二次看见这个题目了,第一次看见是另一场比赛的A题,想了一个小时不会写就弃了 从来没想过这个题能这么玩 线段树上记录根到叶子节点的距离 初始线段树上先记下根节点1到各叶子节点的距离 先离 ...

  3. ie img 3px bug

    ie img 3px bug 日期:2008-11-22 分类:CSS ie img 有 3px 的缝隙也是 ie 的经典 bug 之一,相信已经不陌生了,但还是先看看效果吧(也许你并没有见过): 效 ...

  4. socketserver+socket实现较为复杂的ftp,支持多用户在线

    客户端(ftp_client.py) import socketserver,json,hashlib,os from pymongo import MongoClient ''' *****要点** ...

  5. Java EE学习笔记(六)

    初识MyBatis 1.MyBatis的定义 1).MyBatis(前身是iBatis)是一个支持普通SQL查询.存储过程以及高级映射的持久层框架. 2).MyBatis框架也被称之为ORM(Obje ...

  6. 如何在VirtualBox虚拟机中安装XP系统? 转

    关闭VM (windows 7 )的方法, 使用 退出 保持状态 开启VM (windows 7 )的方法, 选择启动 ######Iissue 1 网络连接不上,可以重新初始化 网络连接. #### ...

  7. 一个页面有相同ID元素的情况分析

    经常会遇到一个页面中有相同定义相同id的情况,从道理上来说,id应该是这个页面中某个元素的唯一标识,所以不应该出现有相同id的情况,否则会产生意想不到的结果.而且各个浏览器的表现也是不一样的.我只做了 ...

  8. JDK原子类操作

    JDK原子类操作及原理 在JDK5之后,JDK提供了对变量的原子类操作, java.util.concurrent.atomic里都是原子类 原子类的分类 原子更新基本类型 原子更新数组 原子更新抽象 ...

  9. iOS组件化开发· 什么是组件化

    越来越多公司,开始了组件化,你还要等到什么时候...... 说到开发模式,我们最熟知的开发模式 MVC 或者最近比较热门的MVVM.但是我今天说的组件化的开发,其实MVC不是一类的.它其实是····· ...

  10. [Python]输出中文报错的解决方法

    问题现象:在PyCharm工具编辑python语句输出中文时,程序报错. 解决方法(2种): 1.在代码开头加#coding=utf-8(注意要加#) 2.还是在代码开头加#-*- coding: u ...