Y2K Accounting Bug POJ 2586(思维+贪心)(自闭版贪心)

本文探讨了一种解决千年虫问题的算法,该问题涉及计算微软公司在1999年可能的最大盈余或赤字,考虑到公司连续5个月的盈亏情况及8次业绩公告均为赤字的情况。

计算机机械师会计(ACM)遭受了千年虫的困扰,失去了一些为微软公司准备年度报告的重要数据。              

他们只记得微软公司在1999年的每个月和每个月都公布盈余或赤字,当微软公司公布盈余时,盈余的数量是s,当微软公司公布赤字时,赤字是d。他们不记得公布盈余或赤字的是哪个月或几个月。与其他公司不同的是,微软公司在一年中连续5个月公布业绩。ACM知道这8个公告中的每一个都报告了赤字,但他们不知道赤字有多大。总会计师几乎肯定微软公司将在1999年全年公布盈余。几乎但不完全是。         

写一个程序,决定微软公司在1999年是否出现赤字,或者如果1999年可能出现盈余,那么他们可以公布的最大盈余额是多少。              

输入              

输入是一系列行,每个行包含两个正整数s和d。              

产量              

对于每一行输入,输出一行,其中包含一个整数,给出全年的盈余金额,如果不可能,则输出赤字。 

Sample Input

59 237
375 743
200000 849694
2500000 8000000

Sample Output

116
28
300612
Deficit

一看到这道题目,这是啥玩意,蒙圈了,题目完全看不懂啊。这个8个公告是个啥,连续5个月公布一下业绩,都是啥?一脸蒙圈。

去看了看题解,原来是每五个月 公布业绩,每月的业绩是盈余和亏损两种可能,但是题目已经说明确了,每五月公布一次业绩且每次公布都是赤字(一个月亏了也可以叫赤字,每个业绩的公布的赤字的意思就是前几个月的盈利都比亏的少,所以前几个月加起来是亏的,所以是赤字),这块很难懂,很难看懂题目。这个 8 次公告就是1-5  2-6  3-7  4-8  5-9   6-10   7-11   8-12 这8次总结 ,每次都是赤字,就是上面说的盈利总和小于亏的总和。要满足的条件是每次公布业绩都是赤字(上面说了意思了),而且是每5次,有这几种情况,5个月中有一次赤字,有两次赤字,有三次赤字,有四次赤字,有五次赤字,而且是这八次的每一次都会有赤字()。我们就有了这几种情况 :

在保证连续5个月都亏损的前提下,使得每5个月中亏损的月数最少.(s是盈利,d是亏损),毕竟是贪心,所以每五次都要尽量少的亏损,但还是要必须有 至少一次,所以就采用这种排列方式,否则就不是最少的亏损了(可以想想)。然后就是盈利最大值,因为就只有12 个月,每五个月 一个周期,就算每五个只有一个盈利,最后那两个月肯定是有盈利的 (除非全都是亏损),所以12个月份就全都算上就是盈利的最大值(说的有点不清楚,想想就会出来的)。 
              x=1:  ssssd,ssssd,ss    d>4s     赢利10个月  10s-2d
              x=2:  sssdd,sssdd,ss    2d>3s    赢利8个月     8s-4d
              x=3:  ssddd,ssddd,ss    3d>2s    赢利6个月     6s-6d 
              x=4:  sdddd,sdddd,sd    4d>s     赢利3个月     3s-9d
              x=5:  ddddd,ddddd,dd    4d<s     无赢利

代码:


#include<stdio.h>
#include<string>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=1005;
#include<iostream>
typedef long long ll;
int main()
{
	int s,d;
	int res;
	while(cin>>s>>d)
	{
		if(d>4*s)
			res=10*s-2*d;
		else if(2*d>3*s)
			res=8*s-4*d;
		else if(3*d>2*s)
			res=6*(s-d);
		else if(4*d>s)
			res=3*(s-3*d);
		else
			res=-1;
		if(res<0)
			cout<<"Deficit"<<endl;
		else
			cout<<res<<endl;	
	}
	return 0;
}

这道贪心,完全出乎我对贪心的想象,以前做惯了区间类的题目,不知如何下手。
 

 

 

## 软件功能详细介绍 1. **文本片段管理**:可以添加、编辑、删除常用文本片段,方便快速调用 2. **分组管理**:支持创建多个分组,不同类型的文本片段可以分类存储 3. **热键绑定**:为每个文本片段绑定自定义热键,实现一键粘贴 4. **窗口置顶**:支持窗口置顶功能,方便在其他应用程序上直接使用 5. **自动隐藏**:可以设置自动隐藏,减少桌面占用空间 6. **数据持久化**:所有配置和文本片段会自动保存,下次启动时自动加载 ## 软件使用技巧说明 1. **快速添加文本**:在文本输入框中输入内容后,点击"添加内容"按钮即可快速添加 2. **批量管理**:可以同时编辑多个文本片段,提高管理效率 3. **热键冲突处理**:如果设置的热键与系统或其他软件冲突,会自动提示 4. **分组切换**:使用分组按钮可以快速切换不同类别的文本片段 5. **文本格式化**:支持在文本片段中使用换行符和制表符等格式 ## 软件操作方法指南 1. **启动软件**:双击"大飞哥软件自习室——快捷粘贴工具.exe"文件即可启动 2. **添加文本片段**: - 在主界面的文本输入框中输入要保存的内容 - 点击"添加内容"按钮 - 在弹出的对话框中设置热键和分组 - 点击"确定"保存 3. **使用热键粘贴**: - 确保软件处于运行状态 - 在需要粘贴的位置按下设置的热键 - 文本片段会自动粘贴到当前位置 4. **编辑文本片段**: - 选中要编辑的文本片段 - 点击"编辑"按钮 - 修改内容或热键设置 - 点击"确定"保存修改 5. **删除文本片段**: - 选中要删除的文本片段 - 点击"删除"按钮 - 在确认对话框中点击"确定"即可删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值