P1167 刷题 [一道特别好的练习计算时间的题]

https://www.luogu.com.cn/problem/P1167
模拟,贪心,排序
黄色题
思路:
1.计算出时间差
2.最后特别简单的贪心
读入:
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]);
复制代码
#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; }
复制代码

 


__EOF__

本文作者灰の魔女伊蕾娜
本文链接https://www.cnblogs.com/2elaina/p/16565052.html
关于博主:编程小萌新一名,希望从今天开始慢慢提高,一步步走向技术的高峰!
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   -イレイナ  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示