洛谷 P1167 刷题
洛谷 P1167 刷题
题目描述
noip临近了,小A却发现他已经不会写题了。好在现在离竞赛还有一段时间,小A决定从现在开始夜以继日地刷题。也就是说小A废寝忘食,一天二十四小时地刷题。
今天的日期(时间)是yyyyyyy**y年mmm**m月ddd**d日hhh**h时minmin分,考试的时间是yyyyyyy**y'年mmm**m'月ddd**d'日hhh**h'时minmin'分。这之间的所有时间小A都用来刷题了,那么考试之前他最多能刷多少题呢?注意哦,考虑闰年。
时间紧张小A只管数量不管质量。当然有的题目容易一些,有的题目难一些。根据小A的经验,他能一眼看出写出某一个题目需要的时间,以分钟记。
现在给出洛谷Online Judge的题目列表,请你挑出最多的题目使小A能在竞赛前写出来。
我们假设从远古到未来,历法的表示与现在一样。
输入格式
第一行一个整数NN,表示洛谷Online Judge的题目数,N≤5000N≤5000。
接下来NN行,每行一个整数表示刷该题需要用的时间,以分钟记(\le 10000≤10000)。(这个题本身是什么并不重要,不是么?小A已经写过题目数为00个)。
接下来两行依次是当前时间和竞赛时间。时间给出的格式是:yyyy-mm-dd-hh:minyyy**y−m**m−d**d−h**h:min,例如:2007-06-23-02:002007−06−23−02:00,采用2424小时制,每天从00:00~23:59,年份从00000000到99999999。
输出格式
一行,一个整数,noip前最多刷的题目数。
输入输出样例
输入 #1复制
输出 #1复制
题解:
一道模拟题,加了一点点的贪心。
其实这题的贪心非常好想,就是时间少的先来,直接排序扫就可以。
带着这个思路,我们过来写代码:
然后我们发现我们卡在时间的处理上了...果然我还是蒟蒻
所以我在这里主要介绍一下这些“日期题”的处理技巧。
首先是读入,针对于这种读入,我们用字符串处理再从字符串中提取实在是麻烦的要命。所以我们直接用一种简化的方式:
scanf("%d-%d-%d-%d:%d",&start[1],&start[2],&start[3],&start[4],&start[5]);
scanf("%d-%d-%d-%d:%d",&endd[1],&endd[2],&endd[3],&endd[4],&endd[5]);
不用担心这种方法会爆锅,根本不可能,简单好用,骗分首选。
读入完事了,接下来我们需要把这个时间段处理成分钟数(这样才能贪心)。
我给大家介绍两种方法把这个时间段分钟数处理出来。
第一种做法:
我们以0000年1月1日的00:00分做基准线(也不知道这时候基督这小家伙出生没),分别用起始日期和结束日期减去这个基准,然后就处理出了这个时间段(有一点点前缀和的味道)
然鹅我并没有这么做
第二种做法:
实在是惭愧,本蒟蒻只能想到最朴实无华的模拟方法。你想啊,我们可以先处理出天数然后×1440(24*60,一天的分钟数),然后再处理每天的分钟。
然后我们又想到,可不可以逐次处理年月日,最后再一点点的多退少补(注意这4个字!!)呢?
当然可以!!
我们先从起始年到终止年(注意不能<=终止年而要减去1即<终止年,下同)
如果是闰年就加上366天,否则加365天。
然后我们会发现,我们多处理了起始年的前半年,少处理了终止年的前半年。
这就是多退少补的思想了。先判闰年,用两个月份数组处理。
同理,我们多处理了起始月的前半个月,少处理了终止月的前半个月。
所以我们继续多退少补。
最后处理小时和分钟。
贪心的部分我就不讲了,这道题的难点已经说完了,这道题的贪心如果想不出来还是退役多练练吧。
注意一下:我一开始WA了两个大数据的点,是因为最后输出的时候,直接在else里输出,这样如果是极大数据的话,根本就进不去else那里,导致输出为空,请大家引以为戒。
代码:
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
int n,time,ans;
int a[5010];
int m1[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int m2[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int start[10],endd[10];
bool check(int x)
{
if((x%4==0 && x%400!=0) || x%400==0)
return 1;
return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+n+1);
scanf("%d-%d-%d-%d:%d",&start[1],&start[2],&start[3],&start[4],&start[5]);
scanf("%d-%d-%d-%d:%d",&endd[1],&endd[2],&endd[3],&endd[4],&endd[5]);
for(int i=start[1];i<endd[1];i++)
{
if(check(i))
time+=366;
else
time+=365;
}
if(check(start[1]))
for(int i=1;i<start[2];i++)
time-=m2[i];
else
for(int i=1;i<start[2];i++)
time-=m1[i];
if(check(endd[1]))
for(int i=1;i<endd[2];i++)
time+=m2[i];
else
for(int i=1;i<endd[2];i++)
time+=m1[i];
for(int i=1;i<start[3];i++)
time--;
for(int i=1;i<endd[3];i++)
time++;
time=time*24*60;
time-=60*start[4]+start[5];
time+=60*endd[4]+endd[5];
for(int i=1;i<=n;i++)
{
if(time>=a[i])
{
time-=a[i];
ans++;
}
else
break;
}
printf("%d",ans);
return 0;
}
洛谷 P1167 刷题的更多相关文章
- [洛谷P1707] 刷题比赛
洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...
- 洛谷P5274 优化题(ccj)
洛谷P5274 优化题(ccj) 题目背景 CCJCCJ 在前往参加 Universe \ OIUniverse OI 的途中... 题目描述 有一个神犇 CCJCCJ,他在前往参加 Universe ...
- 洛谷 P4148 简单题 KD-Tree 模板题
Code: //洛谷 P4148 简单题 KD-Tree 模板题 #include <cstdio> #include <algorithm> #include <cst ...
- 【AC自动机】洛谷三道模板题
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
- [洛谷U22157]刷水题(数位dp)(hash)
题目背景 做正经题是不可能做正经题的,这辈子都不可能做正经题的,毒瘤题又不会做毒瘤题,就是水题这种东西,才维持了蒟蒻的信心: 题目描述 这里有N+1 道水题,编号分别为0 ~N+1 ,每道水题都有它自 ...
- 山东省济南市历城第二中学——洛谷图论入门题--基本题必做 图的遍历—3.骑马修栅栏(fence)
由于我这个破题提交了十四五遍,所以我决定写篇博客来记录一下. 这个题的题目描述是这样的 首先一看这个题我瞬间就想到了一笔画问题(欧拉回路). 对于能够一笔画的图,我们有以下两个定理. 定理1:存在欧拉 ...
- 【最大流ISAP】洛谷P3376模板题
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 【后缀数组】洛谷P3809模板题
题目背景 这是一道模板题. 题目描述 读入一个长度为 n n n 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置. ...
- A 洛谷 P3601 签到题 [欧拉函数 质因子分解]
题目背景 这是一道签到题! 建议做题之前仔细阅读数据范围! 题目描述 我们定义一个函数:qiandao(x)为小于等于x的数中与x不互质的数的个数. 这题作为签到题,给出l和r,要求求. 输入输出格式 ...
随机推荐
- C# socket ipv6初体验
Server: serverSocket = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp) ...
- 手把手教你 通过 NuGet.Server 包 搭建nuget服务器,并使用桌面工具上传 nuget 包,免命令行
新建web项目 工具:VS2013 版本:.Net Framework 4.6,低版本也行,不过要找到对应版本的Nuget.Server 装了NuGet客户端(百度如何安装) WebForm或MVC都 ...
- (六)golang--变量
什么是变量? 变量相当于内存空间中一个数据存储空间的表示,可以理解为一个门的房牌号:该区域有自己的名称(变量名)和类型(数据类型) 变量的使用步骤:申明--赋值--使用 package main im ...
- Matlab中添加语音处理(voicebox)工具箱
系统环境 win10+Matlab2017b 下载voicebox工具箱 官方下载:http://www.ee.ic.ac.uk/hp/staff/dmb/voicebox/voicebox.zip ...
- 基于 HTML5 换热站可视化应用
换热站是整个热网系统中最核心的环节,它将一侧蒸汽或高温水通过热交换器换成可以直接进入用户末端的采暖热水.换热站控制系统是集中供热监控系统的核心部分,换热站控制系统既可独立工作,也可以接受调度中心的监督 ...
- Centos 7搭建Gitlab服务器超详细Centos 7搭建Gitlab服务器超详细(搭建成功)
一. 安装并配置必要的依赖关系在CentOS系统上安装所需的依赖:ssh,防火墙,postfix(用于邮件通知) ,wget,以下这些命令也会打开系统防火墙中的HTTP和SSH端口访问. 注意:用户不 ...
- 【ELK】elasticsearch使用bulk 导入批量的数据集文件报错:Validation Failed: 1: no requests added
执行命令如下: curl -XPOST http://192.168.6.16:9200/my_new_index/user/_bulk?pretty --data-binary @/cjf/es/e ...
- python程序设计基础(程序设计基础方法)
python初学者程序练习题 注:练习题涉及到range()函数的使用方法和python绘制,后面会单独发篇解释说明. 1.字符串拼接.接收用户输入的两个字符串,将它们组合后输出 str1=input ...
- java get请求带参数报错 java.io.IOException: Server returned HTTP response code: 400 for URL
解决方案 在使用JAVA发起http请求的时候,经常会遇到这个错误,我们copy请求地址在浏览器中运行的时候又是正常运行的,造成这个错误的原因主要是因为请求的URL中包含空格,这个时候我们要使用URL ...
- 记录一次排查使用HttpWebRequest发送请求的发生“基础连接已关闭:接收时发生错误”异常问题的过程
描述:某次更新程序,需要给测试员MM测试,之前都是正常的,更新后给MM测试就报异常System.Net.WebException 基础连接已经关闭:接收时发生错误 -------> System ...