• 到天宫做客(2017寒假培训测试压轴题)


    个人QQ:757394026
    团队QQ:466373640
    个人博客:www.doubleq.win
    c++/noi/信息学奥数博客:http://www.cnblogs.com/zwfymqz

    题目描述

    有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒。我犹豫了。天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长。记住,今年是4000年。天上一天也是24小时,每小时60分,每分60秒。

    输入

    第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入保证无错误,日期无重复。

    输出

    仅有一行包含一个非负整数,即在天上的时间(四舍五入精确到秒)。

    样例输入

    2
    3 8
    12 2
    

    样例输出

    63266




    代码:
    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a[10001];
    int month[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
    int main()
    {
        int tot;
        int n;
        int x,y;
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
        {
        tot=0;
        scanf("%d%d",&x,&y);//3 8    12 2
        for(int j=1;j<x;j++)
        {
            tot=month[j]+tot;
        }
        tot=tot+y;
        a[tot]=1;
        }
        double le=0;
        double l=0;
        for(int i=1;i<=366;i++)
        {
            if(a[i]==1)
            {
                le=max(l,le);
                l=0;
            }
            else l++;
            if(i==366)le=max(l,le);
            
        }
        double ans;
        ans=double((le)/366)*3600*24;
        cout<<int(ans+0.5);
        return 0;
    }

    思路:

    这道题有难度,难就难在:

    1.本题突破口特殊,需要从测试数据下手,推出一个算法

    2要考虑到今年是闰年的情况

    3得到算法后如何取最长月份

    4最后的四舍五入

    废话不多说,自己看代码,个人认为我写的是全网最简解法

    个人博客doubleq.win

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    2.完全背包问题
    1.01背包问题
    19.区间合并
    18.区间和
    16.数组元素的目标和
    15.最长连续不重复子序列
    14.差分矩阵
    1.注册七牛云账号
    1.1 linux查看系统基本参数常用命令
    图书管理增删改查&父子调用&前后端
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/6379518.html
Copyright © 2020-2023  润新知