【题解】PIZZA 贪心
题目描述
Michael请N个朋友吃馅饼,但是每个朋友吃且仅吃一个馅饼的1/4、1/2或3/4。请你编程求出Michael至少需要买多少个馅饼。
输入输出格式
输入格式:
输入文件的第一行是整数N;接下来的N行中,每行都是1/4、1/2或3/4。
输出格式:
输出文件仅有一行包含一个整数——至少需要购买的馅饼数目。
输入输出样例
输入样例#1: 复制
6
3/4
1/2
3/4
1/2
1/4
1/2
输出样例#1: 复制
4
说明
1 ≤ N ≤ 10,000
思路
- 简单贪心但要注意细节讨论
贪心:
- 考虑到3/4块的要么与1/4的配对成一块,要么单独作为一块;
- 同时与1/2,1/4相比更容易使代价增加(即期望更大),所以要优先处理3/4
之后我分情况讨论了一下
- 若一开始1/4的就比3/4的少,
- 那么处理完第一步后,1/4已经被消耗完.只可能剩下1/2与3/4大小的.
- 对于1/2块的考虑与自己配对
- 最后加上没能配对的1/2和第一步后剩下的3/4
- 若刚开始时1/4比3/4多
- 第一步后只剩下了1/4与1/2大小的
- 先考虑两个1/4与一个1/2组成一队
- 在分别与自己配对
- 最后根据情况得到ans
代码
#include<cmath>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register int
using namespace std;
inline int read(){
int x=0,w=1;
char ch=getchar();
while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
if(ch=='-') w=-1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-48,ch=getchar();
return x*w;
}
int sum_1,sum_2,sum_3,ans=0;
char s[5];
int main(){
freopen("T21330.in","r",stdin);
int n;
n=read();
for(re i=1;i<=n;++i) {
scanf("%s",s);
if(s[0]=='1'&&s[2]=='4') sum_1++;
if(s[0]=='1'&&s[2]=='2') sum_2++;
if(s[0]=='3'&&s[2]=='4') sum_3++;
}
int ans=0;
if(sum_1>sum_3) {
ans+=sum_3;
sum_1-=sum_3;
sum_3=0;
}else {
ans+=sum_1;
sum_3-=sum_1;
sum_1=0;
}
if(sum_1==0) {
ans=ans+(sum_2/2)+(sum_2%2)+sum_3;
printf("%d\n",ans);
return 0;
} else {
while(sum_1>=2&&sum_2>=1) {
ans++;
sum_1-=2;
sum_2-=1;
}
ans+=sum_1/4+sum_2/2;
sum_1%=4;
sum_2%=2;
if((sum_1==0||sum_1==1)&&(sum_2!=0)) {printf("%d\n",ans+1);return 0;}
if(sum_1!=0&&sum_2==0) {printf("%d\n",ans+1);return 0;}
//ans=ans+sum_2;
//printf("%d\n",ans);
return 0;
} }
c++
【题解】PIZZA 贪心的更多相关文章
- [CQOI2012]模拟工厂 题解(搜索+贪心)
[CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...
- 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】
树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...
- Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心
1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 338 Solved: 136[Submit] ...
- HDU5124lines题解-堆+贪心的一个新方法
题目链接 https://cn.vjudge.net/problem/HDU-5124 胡扯 感觉说新方法好像有点不太好,但是翻了十几篇博客都是清一色离散化之类的... 为什么会做这道题呢?因为前几天 ...
- 洛谷P5019 铺设道路 题解 模拟/贪心基础题
题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...
- 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)
Function 题目链接 Problem Description wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = ...
- 【PA2014】Bohater 题解(贪心)
前言:一道经典贪心题. -------------------------- 题目链接 题目大意:你有$z$滴血,要打$n$只怪.打第$i$只怪扣$d_i$滴血,回$a_i$滴血.问是否存在一种能够通 ...
- 【NOIP2015】斗地主 题解(DFS+贪心)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...
- 【NOI2010】超级钢琴 题解(贪心+堆+ST表)
题目链接 题目大意:求序列内长度在$[L,R]$范围内前$k$大子序列之和. ---------------------- 考略每个左端点$i$,合法的区间右端点在$[i+L,i+R]$内. 不妨暴力 ...
随机推荐
- ppt技巧--字体变化
常见字体搭配 Nordri Tools
- python通过字符串定义函数名
记录python里的一个有意思的小技巧:通过字符串定义函数名称. import sys m=sys.modules[__name__] def temp(x): return x+1 setattr( ...
- Redis6.x学习笔记(四)复制
复制概述 Redis支持复制的功能,以实现当一台服务器的数据更新后,自动将新的数据异步同步到其它数据库. Redis复制实现中,把数据库分为主数据库master和从数据库slave,主数据库可以进行读 ...
- 使用小记:Zookeeper中动态改变节点的功能
Zookeeper 3.5+提供了reconfig功能实现动态配置节点,官方的说明是,"你再也不需要进行全部节点重启"就可以应用所有的修改: http://zookeeper.ap ...
- alpine安装网络工具
telnet:busybox-extras net-tools: net-tools tcpdump: tcpdump wget: wget dig nslookup: bind-tools curl ...
- Envoy:主动健康监测
实验文件 docker-compose version: '3' services: envoy: image: envoyproxy/envoy-alpine:v1.15-latest enviro ...
- [刷题] 167 Two Sum II
要求 升序数组 找到两个数使得它们相加之和等于目标数 函数返回两个下标值(下标从1开始) 示例 输入:numbers = [2, 7, 11, 15], target = 9 输出:[1,2] 思路 ...
- bash调试 脚本第一行 加set -x #!/bin/expact -d
#!/bin/bash set -x 脚本第一行加 #!/bin/expact -d
- centos7 连接打印机
centos7 连接打印机 2017-08-07 15:05:33 五岳寻仙客 阅读数 2531更多 分类专栏: Liunx的日常使用 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版 ...
- 6T硬盘分区
6T硬盘分区 1.umount /data1 # 如果正在使用需要此命令卸载. 2.parted /dev/sdb # parted 分区工具,选择要分区的硬件设备 mklabel gp ...