题目描述

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

  1. [CQOI2012]模拟工厂 题解(搜索+贪心)

    [CQOI2012]模拟工厂 题解(搜索+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1327574 链接题目地址:洛谷P3161 BZOJ P26 ...

  2. 洛谷 P4269 / loj 2041 [SHOI2015] 聚变反应炉 题解【贪心】【DP】

    树上游戏..二合一? 题目描述 曾经发明了零件组装机的发明家 SHTSC 又公开了他的新发明:聚变反应炉--一种可以产生大量清洁能量的神秘装置. 众所周知,利用核聚变产生的能量有两个难点:一是控制核聚 ...

  3. Bzoj 1229: [USACO2008 Nov]toy 玩具 题解 三分+贪心

    1229: [USACO2008 Nov]toy 玩具 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 338  Solved: 136[Submit] ...

  4. HDU5124lines题解-堆+贪心的一个新方法

    题目链接 https://cn.vjudge.net/problem/HDU-5124 胡扯 感觉说新方法好像有点不太好,但是翻了十几篇博客都是清一色离散化之类的... 为什么会做这道题呢?因为前几天 ...

  5. 洛谷P5019 铺设道路 题解 模拟/贪心基础题

    题目链接:https://www.luogu.org/problemnew/show/P5019 这道题目是一道模拟题,但是它有一点贪心的思想. 我们假设当前最大的深度是 \(d\) ,那么我们需要把 ...

  6. 2019中国大学生程序设计竞赛-女生专场(重现赛)部分题解C-Function(贪心+优先队列) H-clock(模拟)

    Function 题目链接 Problem Description wls 有 n 个二次函数 Fi(x) = aix2 + bix + ci (1 ≤ i ≤ n). 现在他想在∑ni=1xi = ...

  7. 【PA2014】Bohater 题解(贪心)

    前言:一道经典贪心题. -------------------------- 题目链接 题目大意:你有$z$滴血,要打$n$只怪.打第$i$只怪扣$d_i$滴血,回$a_i$滴血.问是否存在一种能够通 ...

  8. 【NOIP2015】斗地主 题解(DFS+贪心)

    题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的AAA到KKK加上大小王的共545454张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下: ...

  9. 【NOI2010】超级钢琴 题解(贪心+堆+ST表)

    题目链接 题目大意:求序列内长度在$[L,R]$范围内前$k$大子序列之和. ---------------------- 考略每个左端点$i$,合法的区间右端点在$[i+L,i+R]$内. 不妨暴力 ...

随机推荐

  1. Spring MVC工作原理及源码解析(一) MVC原理介绍、与IOC容器整合原理

    MVC原理介绍 Spring MVC原理图 上图是Spring MVC工作原理图(图片来自网上搜索),根据上图,我们可以得知Spring MVC的工作流程如下: 1.用户(客户端,即浏览器)发送请求至 ...

  2. 合并两个yuv文件的C++代码

    //将BasketballPass_416x240_50.yuv序列的前50帧和BlowingBubbles_416x240_50.yuv序列的前250帧合并成out.yuv //参数配置416 24 ...

  3. [bug] NameNode无法启动 invalid-uri-for-namenode-address

    配置文件core-site.xml中设置有误 <property> <name>fs.defaultFS</name>(NameNode地址) <value& ...

  4. [刷题] 144 Binary Tree Preorder Traversal

    要求 二叉树的前序遍历 实现 递归 栈模拟          定义结构体 Command 模拟指令,字符串s描述命令,树节点node为指令作用的节点 定义栈 Stack 存储命令 1 #include ...

  5. 攻防世界(一)baby_web

    攻防世界系列:baby_web 方法一: 按照提示,初始界面自然想到index.php,访问后界面(注意到URL)仍是1.php 打开hackbar查看响应,发现确实有index.php点开看到了Fl ...

  6. Linux巡检常用命令

    # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...

  7. ipmi配置方法-20200328

    ipmi配置错误-20200328[root@localhost home]# ipmitool lan set 1 ipsrc staticCould not open device at /dev ...

  8. Linux useradd 命令介绍

    Linux useradd 命令介绍 作者: Alan Formy-duval 译者: LCTT Brooke Lau | 2020-01-06 22:58 使用 useradd 命令来添加用户(并且 ...

  9. 6T硬盘分区

    6T硬盘分区 1.umount /data1   #  如果正在使用需要此命令卸载. 2.parted /dev/sdb     # parted 分区工具,选择要分区的硬件设备 mklabel gp ...

  10. Qt 设置窗体透明

    一.前言 在音频开发中,窗体多半为半透明.圆角窗体,如下为Qt 5.5 VS2013实现半透明方法总结. 二.半透明方法设置 1.窗体及子控件都设置为半透明 1)setWindowOpacity(0. ...