zoukankan      html  css  js  c++  java
  • 到天宫做客-最后一分钟AC!!!

    问题 C: 到天宫做客

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 100  解决: 26
    [提交][状态][讨论版]

    题目描述

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

    输入

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

    输出

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

    样例输入

    2
    3 8
    12 2
    

    样例输出

    63266

    解题思路:今天是难忘的一天,体会到了一句话,不到最后关头绝不能放弃!最后一分钟AC通过!
      落掉一种情况,就是两个相邻的日期是在一个月内的时候,我的算法会计算错误。
      感觉自己想出来的方法经常是相当冗余且容易出错,还是自己功力不够啊。
      选取算法的时候应选取简单地不容易出错的才行。
      能一块讨论就没必要分情况讨论,要注意合并相同的一些情况。
    代码:
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    typedef struct node{
        int month;
        int day;
    };
    node a[370];
    
    int cmp(node a,node b){
        return (a.month<b.month) || (a.month==b.month&&a.day<b.day);
    }
    
    int main()
    {
        int n;
        int maxx=0;
        int daycount[370]={0};
        int monthday[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
        scanf("%d",&n);
        if(n==0){
            printf("86400
    ");
            return 0;
        }
        if(n==366){
            printf("0
    ");
            return 0;
        }
        for(int i=0;i<n;i++){
            scanf("%d %d",&a[i].month,&a[i].day);
        }
        sort(a,a+n,cmp);
        for(int i=0;i<n+1;i++){
            if(i==0){
                for(int j=1;j<a[i].month;j++){
                    daycount[i]+=monthday[j];
                }
                daycount[i]+=a[i].day-1;
            }
            if(i==n){
                for(int j=a[i-1].month+1;j<=12;j++){
                    daycount[i]+=monthday[j];
                }
                daycount[i]+=(monthday[a[i-1].month]-a[i-1].day);
            }
            if(i!=0&&i!=n&&a[i].month!=a[i-1].month){
                for(int j=a[i-1].month+1;j<a[i].month;j++){
                    daycount[i]+=monthday[j];
                }
                daycount[i]+=(monthday[a[i-1].month]-a[i-1].day);
                daycount[i]+=a[i].day-1;
    
            }
            if(i!=0&&i!=n&&a[i].month==a[i-1].month){//这种情况做的时候被落掉!
                daycount[i]+=a[i].day-a[i-1].day-1;
            }
            maxx=max(daycount[i],maxx);
        }
        double second=maxx*86400*1.0/366;
        printf("%.0lf
    ",maxx*86400*1.0/366);
    
    
        return 0;
    }
     
  • 相关阅读:
    Java基础——数组复习
    JavaScript 笔记总结
    HTML总结
    css代码添加背景图片常用代码
    Java 并发包之线程池综述
    Java 并发之Concurrent 包综述
    AQS 框架之 Lock 接口
    AQS 框架之 LockSupport 线程阻塞工具类
    JAVA 锁之 Synchronied
    ThreadLocal 线程本地变量
  • 原文地址:https://www.cnblogs.com/TWS-YIFEI/p/5747646.html
Copyright © 2011-2022 走看看