到天宫做客-最后一分钟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\n");
        return 0;
    }
    if(n==366){
        printf("0\n");
        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\n",maxx*86400*1.0/366);

    return 0;
}
 
时间: 2024-10-13 15:50:20

到天宫做客-最后一分钟AC!!!的相关文章

到天宫做客

到天宫做客 题目描述 有一天,我做了个梦,梦见我很荣幸的接到了猪八戒的邀请,到天宫陪他吃酒.我犹豫了.天上一日,人间一年啊!当然,我是个闲人,一年之中也没有多少时日是必须在人间的,因此,我希望选一个最长的空闲时间段,使我在天上待的时间尽量长.记住,今年是4000年.天上一天也是24小时,每小时60分,每分60秒. 输入 第一行是一个非负整数 N,表示4000年中必须呆在人间的天数,以下共N行,每行两个用空格隔开的正整数,即日期(月,日),输入保证无错误,日期无重复. 输出 仅有一行包含一个非负整

Best Coder Lotus and Characters

 Lotus and Characters  Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 262144/131072 K (Java/Others)问题描述Lotus有nn种字母,给出每种字母的价值以及每种字母的个数限制,她想构造一个任意长度的串.定义串的价值为:第1位字母的价值*1+第2位字母的价值*2+第3位字母的价值*3……求Lotus能构造出的串的最大价值.(可以构造空串,因此答案肯定\geq 0≥0)输入描述第一行是数据

LeetCode: Maximum Subarray 解题报告

Maximum Subarray Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4],the contiguous subarray [4,−1,2,1] has the largest sum = 6. SOLUTION 1: 采用滑

HDU2043 密码

解题思路:10分钟AC,不解释,so easy! 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int maxn = 55; 6 char str[maxn]; 7 int n; 8 int main() 9 { 10 scanf("%d", &n); 11 while(n--) 12 { 13 scanf

LeetCode: Distinct Subsequences 解题报告

Distinct Subsequences Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without di

2017/8/12 考试吐槽

2017 8 12 得分:200 我只能说一句话:这才是$NOIP$难度吧--(神$TM$联赛考$FFT$) A.灌水 题意:$n$根板子长度是$1~n$全排列,找出一种方法,使得板子组成的容器容量恰好为定值. 眼瞪十分钟$+$$coding$ $15$分钟 $+$ $debug$ $5$分钟 $=$ $AC$. 首先我们可以知道,整个容器容量最大的情况就是两根最长的板子夹在两边,中间全是相对较短的板子,这样获得的最大的容量就是\[\frac{(n - 2)(n- 1)}{2 }\].那么我们就

剪辑的楼天城的ACM之路

楼天城楼教主的acm心路历程(剪辑) 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比赛.不过在

NOIP 2003解题报告

第一题(神经网络): 题目大意,给出一些点,每个点都有2个值,c和u,给出一些有向边,权值为w.入度为0的点的c已知,其它点的c未知,每个入度不为0的点node的c等于sum(c[k]*w[k][node]),k为与它相连(有向边指向node)的点.求所有出度为0且c>0的点. 解题过程: 此题的方法应该很多,比如拓扑排序,BFS等:我直接写了个递归,要求某个点的c,就先访问所有与它相连的点,递归下去直到 碰到入度为0的点.. 较麻烦的送分题,30分钟AC 第二题(侦探推理): 明明同学最近迷上

中国大学生编程第一人:楼天城楼教主的acm心路历程

作为acm爱好者,分享下楼教主的故事,作为勉励 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比