题目描述

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. Raspberry PI 4B 安装和配置 Raspbian

    做记录,以备之后需要,待完成中 目录 做记录,以备之后需要,待完成中 下载镜像和安装程序 ssh 远程访问 下载镜像和安装程序 Raspbian: installer: ssh 远程访问 开启ssh ...

  2. vue 访问页面时报错 Failed to compile

    这个是因为node-sass没安装好,所以要重新安装 windows下运行命令:npm install node-sass --registry=https://registry.npm.taobao ...

  3. 有关80386cpu在保护模式下的虚拟地址,线性地址和实际物理地址的关系

    80386cpu是8086cpu的升级版,其具有32位的寄存器.(32根地址线和32根数据线) 8086cpu其是16位的寄存器但是其地址线有20根,其寻址范围为2的20次方,但是有一个16位的寄存器 ...

  4. c#RSA 私钥加签公钥解签

    /// RSA签名 /// </summary> /// <param name="data">待签名数据</param> /// <pa ...

  5. Mac 将 App 程序打包成为 dmg

    用最简单的打包方式,将自己开发的App打包成为DMG,实现共享分发,快速安装 1. 新建DMG 打开磁盘工具,新建DMG File->New Image->Blank Image 创建DM ...

  6. shell中的 “.”和source export

    在shell脚本里面export的环境变量,在set里面竟然看不到.为什么在shell脚本里面用export设置环境变量之后,当shell执行完了,用set命令看不到呢?但是你如果直接在终端里expo ...

  7. 《SystemVerilog验证-测试平台编写指南》学习 - 第3章 过程语句和子程序

    <SystemVerilog验证-测试平台编写指南>学习 - 第3章 过程语句和子程序 3.1 过程语句 3.2 任务.函数以及void函数 3.3 任务和函数概述 3.4 子程序参数 3 ...

  8. Linux_计划任务

    [Centos7.4] !!!测试环境我们首关闭防火墙和selinux:免得后面的测试会出现问题 [root@localhost ~]# systemctl stop firewalld [root@ ...

  9. 列出 Ubuntu 和 Debian 上已安装的软件包

    列出 Ubuntu 和 Debian 上已安装的软件包 如果你经常用 apt 命令,你可能觉得会有个命令像 apt 一样可以列出已安装的软件包.不算全错. apt-get 命令 没有类似列出已安装软件 ...

  10. xshell中登录服务器图形化界面

    安装全套的xmanager程序 打开xshell工具程序 点击新建 输入ip等必要信息 点击隧道,英文版为tunnel 勾选红色的选项1和2 填写一些用户名和密码信息(图就略了O(∩_∩)O) 敲入指 ...