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个人 ...
随机推荐
- 洛谷P4570 [BJWC2011]元素(线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 考虑贪心 将所有的矿石按价值从大到小排序 如果一块矿石不会和之前的编号异或为0就加入 这个只要判一下它能不能加进线性基里就可以了 据说这个贪心的证明 ...
- hyperledger fabric 1.0.5 分布式部署 (七)
fabric 使用 fabric-ca 服务 准备部分 首先需要用户从github上download fabric-ca 的工程代码 cd $GOPATH/src/github.com/hyperle ...
- hadoop HA集群搭建(亲测)
1.hadoop-env.sh 2.core-site.xml <configuration> <!-- 指定hdfs的nameservice为ns1 --> <prop ...
- Linux | C代码的编写、运行和调试
1. 建立.c文件 在终端下输入:vi mytest.c [使用编辑器 vim] 键入键盘i键,使vi编辑器进入编辑模式 接下来在vi编译器中编写代码,如: #include <stdio.h ...
- IOS蓝牙连接 初步简单封装使用
最近写一个蓝牙项目 初步实现一下蓝牙设备连接交互,后期继续完善.... 1.连接蓝牙相关操作 BlueToothManger.h // // BlueToothManger.h // SmartRob ...
- 洛谷1005(dp)
1.不要贪,缩小区间去dp就好. 2.预处理指数. 3.__int128可还行. #include <cstdio> #include <cctype> #include &l ...
- AtCoder Regular Contest 078 D
D - Fennec VS. Snuke Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement F ...
- 洛谷P4288||bzoj3564 [SHOI2014]信号增幅仪
bzoj3564 洛谷P4288 可以旋转一下坐标轴使得x轴与长轴方向对齐,然后将所有的横坐标变为自身除以放大倍数,然后就做一个最小圆覆盖 #include<cstdio> #includ ...
- 阿里云-域名免费申请ssl证书过程
1.运行证书服务docker docker run --entrypoint="/bin/sh" -it --name certbotsh certbot/certbot:late ...
- vi/vim 中批量在行插入或删除指定字符
1. 在每行的行首行尾插入指定字符 行首::%s/^/insert_word/ 行尾::%s/$/insert_word/ 2. 在某些行的行进行替换 在2~50行首添加//号 ...