问题 G: 背菜谱

Posted lipu123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了问题 G: 背菜谱相关的知识,希望对你有一定的参考价值。

问题 G: 背菜谱

时间限制: 1 Sec  内存限制: 128 MB
[提交] [状态]

题目描述

扬州是中国四大菜系之一的淮扬菜系的发源地。中午,跑男们来到扬州菜根香饭店,这是家很有名的老字号,有着正宗的淮扬菜。狮子头不松不紧、蟹粉味很浓,扬州炒饭配料丰富,米粒颗颗饱满,煮干丝入口即化、汤头也很鲜……
不过吃饭前,他们还必须完成一项比赛——背菜谱,每人都有一本饭店的菜谱,在规定的时间看谁记住的菜名多。Angelababy发现菜谱中有的菜名字多一些,有的字少一些,多的菜名难背一点,少的菜名好背一点,根据Angelababy的经验,她能一眼看出背一个菜名需要的时间,以分钟记。
开始背菜谱的时间是yyyy年mm月dd日hh时min分,开始测试的时间是yyyy‘年mm‘月dd‘日hh‘时min‘分。那么测试之前她最多能背多少个菜名呢?

输入

第一行一个整数n,表示字典中的单词数,n≤5000。
接下来n行,每行一个整数表示背这个单词需要用的时间,以分钟记,小于等于10000。
接下来两行依次是开始背菜谱的时间和开始测试时间。

输出

输出共一行,包含一个整数,测试前最多能背出的菜名数。

样例输入 Copy

2
1
1
2007-06-23-11:59
2007-06-23-12:00

样例输出 Copy

1

提示

对于100%的数据,1≤n≤5000。

时间给出的格式是:yyyy-mm-dd-hh:min,例如:2007-06-23-02:00,采用24小时制,每天从00:00~23:59,年份从0000到9999。

 

 

 

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string> 
#include <math.h> 
#include<memory.h>
#include<cstring>
using namespace std; 
using namespace std;
typedef long long ll; 
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
    while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
    return x*f;
}
const int INF=0x3f3f3f3f;
const int maxn=1e5+10;
int n;
int v[maxn];
int check(int x)   //判断是否是闰年 
{
    if(x%400==0)return true;
    if(x%100==0)return false;
    if(x%4==0)return true;
    return false;
}
 
int num[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};  //平年每月的天数 
ll ddd(int y,int m,int d) 
{
    y--;
    ll ret=365ll*y+y/4-y/100+y/400+d;
    for(int i=1;i<m;i++)
    {
        ret+=num[i];
        if(i==2&&check(y+1))ret++;
    }
    return ret;
}
void inint(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>v[i]; 
    }
    sort(v+1,v+n+1);
} 
int main(){
    inint();
    char a[100];
    int y1,y2,m1,m2,d1,d2,k1,k2,z1,z2;
//  char t1,t2,t3,t4
//  scanf("%4d%c%2d%c%2d%c%2d%2d%c%2d",&y1,&t1,&m1,&t2,&d1,&t3,&k1,&t4,&z1);
//  cout<<"fjsf"<<endl;
//  getchar();
//  scanf("%4d%c%2d%c%2d%c%2d%2d%c%2d",&y2,&t1,&m2,&t2,&d2,&t3,&k2,&t4,&z2);
    scanf("%s",a);
    y1=(a[0]-0)*1000+(a[1]-0)*100+(a[2]-0)*10+(a[3]-0);
    m1=(a[5]-0)*10+(a[6]-0);
    d1=(a[8]-0)*10+(a[9]-0);
    k1=(a[11]-0)*10+(a[12]-0);
    z1=(a[14]-0)*10+(a[15]-0);
    scanf("%s",a);
    y2=(a[0]-0)*1000+(a[1]-0)*100+(a[2]-0)*10+(a[3]-0);
    m2=(a[5]-0)*10+(a[6]-0);
    d2=(a[8]-0)*10+(a[9]-0);
    k2=(a[11]-0)*10+(a[12]-0);
    z2=(a[14]-0)*10+(a[15]-0);
    ll sum1=k1*60+z1;
    ll sum2=k2*60+z2;
    ll ans1=ddd(y1,m1,d1);
    ll ans2=ddd(y2,m2,d2);
    ll ans=ans2-ans1;
    ans=ans*24*60;
    ans=ans+(sum2-sum1);
    int p=0;
    for(int i=1;i<=n;i++){
        if(ans>=v[i]){
            ans-=v[i];
            p++;
        }
        else{
            break;
        }
    }
    cout<<p<<endl; 
} 

 

以上是关于问题 G: 背菜谱的主要内容,如果未能解决你的问题,请参考以下文章

利用低代码技术开发每日菜谱小程序

俄版百度44.7G源码泄露!遭前员工背刺,涉及搜索地图打车电商等所有主要服务...

解析聚合数据中的菜谱大全

爬取菜谱网站

私厨菜谱app的设计与实现

美食菜谱