• 问题 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; 
    } 
  • 相关阅读:
    WCF 、Web API 、 WCF REST 和 Web Service 的区别
    BusyIndicator using MVVM 忙碌状态指示器的的实现
    复制文件夹的方法 .net
    SQL/LINQ/Lamda
    CSLA验证规则总结
    C++中GB2312字符串和UTF-8之间的转换
    如何用VC编写供PB调用的DLL
    【转】lucene4.3.0 配置与调试
    cygwin主要命令
    【转】eclipse中window->preference选项中没有tomcat的解决方法
  • 原文地址:https://www.cnblogs.com/lipu123/p/12787703.html
Copyright © 2020-2023  润新知